日常使用命令

1.停止所有的container,这样才能够删除其中的images:

docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:

docker rm $(docker ps -a -q)

2.查看当前有些什么images

docker images

3.删除images,通过image的id来指定删除谁

docker rmi <image id>

想要删除untagged images,也就是那些id为<None>的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

docker rmi $(docker images -q)

4进入已停止的容器

sudo docker start 容器id

sudo docker exec -i -t 容器id /bin/bash

5. 重命名镜像名

docker tag 镜像id 重命名:tag

6. 重命名容器名

dokcer rename 容器ID mytomcat7:jre7

正文

1)使用第一个交互式容器

sudo docker run -i -t ubuntu /bin/bash

-i 保证容器中STDIN是开启的,保证持久的标准输入

-t 为创建的容器分配一个伪tty终端

综上容器通过-it 提供了一个交互式的shell

1.首先Docker会检查本地是否存在ubuntu镜像,如果没有,docker会连接官方维护的docker hub registry查看hub并下载该镜像

2.随后使用该镜像再内部创建一个交互式的容器

3.登录到该容器中之后,会显示

user@容器id:/#

容器id名就是容器主机名

2)给容器命名

如果不给docker创建的容器指定名称,docker会为其随机指定一个名称

如果要指定特定的名称,使用--name标志来实现

sudo docker run --name spec_name -i -t ubuntu /bin/bash

3)重新启动已经停止的容器

sudo docker start spec_name

也可以通过容器id启动已经停止运行的容器

4)使用守护式容器

sudo docker run --name daemonizer_container -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"

-d 参数 使得容器会在后台运行

5)查看容器内的进程

要查看容器内的进程,使用docker top命令

sudo docker top  daemonizer_container

6)docker 统计信息

利用stats命令,显示一个或者多个容器的统计信息

sudo docker stats daemonizer_container (或后跟空格其他容器)

7) 在容器内部运行进程

利用docker exec命令在容器内部额外启动新进程

容器内运行的进程有两种类型

1.后台任务

2.交互式任务

sudo docker exec -d daemonizer_container touch /etc/new_file

-d标志需要运行一个后台进程,-d标志之后,指定的是在内部执行这个命令的容器名字和要执行的命令

sudo docker exec -i -t daemonizer_container /bin/bash

这里和运行交互式容器一样,在容器内创建一个新的bash会话

8)停止守护式容器

sudo docker stop daemonizer_container

或者通过容器id来停止

sudo docker stop casa123ca23

如果想要查看已经停止的容器

使用

docker ps -a

只查看正在运行的容器

docker ps

9)自动重启容器

由于某种错误而导致容器停止运行,可以通过--restart=always标志,让docker自动重新启动该容器

sudo docker run --restart=always --name daemonizer_container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done;

10)查看容器具体信息

通过docker inspect 来获取更多的容器信息

sudo docker inspect daemonizer_container

11)删除容器

如果容器已经不再使用,可以使用docker rm命令来删除 (删除前必须保证容器已经停止运行)

删除指定的容器

sudo docker rm 容器id

删除所有容器(注意这里是`(1的左边) 而不是') 

sudo docker rm `sudo docker ps -a -q`

-a 表示列出所有容器

-q 只返回容器的id

`sudo docker ps -a -q` 返回容器id的列表

12)创建一个自定义命名的最基本的容器

sudo docker run -i -t --name container_spec_name ubuntu /bin/bash

13)列出镜像

sudo docker images

如果只查看ubuntu相关镜像

sudo docker images ubuntu

本地的镜像都保存在docker宿主机的/var/lib/docker目录下

可以手动目录查看

也可以用

docker info

查看

14)从Docker hub查找可用镜像

sudo docker search 用户名/仓库名

15)从Docker hub上面拉取镜像

sudo docker pull 仓库
例子
sudo docker pull ubuntu #未指定标签,默认latest标签或者指定带标签的镜像
sudo docker pull 仓库:tag
例子
sudo docker pull ubuntu:16.04

16)从指定镜像创建容器

sudo docker run -i -t 用户名/仓库名 /bin/bash

容器启动命令:docker run --name 参数1 -p 参数2 -v 宿主机与容器交互的目录文件 -d 后台运行

docker run --name tomcat -p 8080:8080 -v /usr/test:/usr/local/tomcat/webapps/test -d tomcat

参数解释:

--name tomcat 表示上一步安装的镜像名称

-p 8080:8080 表示将容器的8080port映射到本机的8080port端口

-v /usr/test:/usr/local/tomcat/webapps/test 表示将本机下的usr目录下的test文件夹映射到容器tomcat的webapps文件夹下

-d tomcat 表示在后台守护进程的方式启动(不进入后台启动),指定上一步安装的镜像名称

17)构建镜像方法

构建镜像有两种方法

  1. docker commit   #不推荐使用
  2. Dockerfile-->docker build  #推荐

其中Dockerfile支持DSL语法, 由指令和参数组成,支持注释

18)登录Docker hub

sudo docker login

登出

sudo docker logout

19)用Dockerfile构建镜像

mkdir DOCKER
cd DOCKER
touch Dockerfile

编辑Dockerfile

FROM ubuntu:14.04
MAINTAINER jojo "12301@qq.com"
RUN apt-get update && apt-get install -y python
RUN echo "hello,docker"
EXPOSE 80

每一条指令都会创建一个新的镜像层并对镜像进行提交

20)基于Dockerfile执行docker build构建新镜像

cd DOCKER

跳到Dockerfile目录

sudo docker build -t="jojo/docker_test" .

注意 别忘记 .代表使用当前目录的Dockerfile进行构建

也可以指定具体的Dockerfile位置,使用-f标志

docker build -t="用户名/仓库名" -f path/to/file

21)如果构建中失败

由于docker构建新镜像是分层进行的,即Dockerfile每一次构建过程都会将结果提交为镜像,所以在某step失败后,可根据最近的step容器id(屏幕输出build过程)

调试哪里错了

修改Dockerfile

继续build

sudo docker run -t -i 最近build的容器id /bin/bash

22)docker build 默认利用之前成功构建的镜像层当作缓存,如果要重头构建镜像,确保构建过程不使用缓存可以使用--no-cache标志

sudo docker build --no-cache -t="jojo/docker_test" .

23)查看镜像构建层或者构建历史

使用docker history

sudo docker history 镜像id

查看新构建的xx镜像的每一层以及每一层的Dockerfile指令

24)使用-p选项映射 容器特定的端口到本地的宿主机端口

docker可以通过两种方法在宿主机分配端口

  1. 随机选择32768~61000较大的端口来映射到容器指定的端口上
  2. 指定具体端口号进行映射
sudo docker run -d -p 127.0.0.1:8080:80 --name container_name jojo/docker_test

上面的命令会将容器的80端口绑定到本地宿主机的127.0.0.1这个ip的8080端口上

但这会限制Docker的灵活性,因此docker 还提供了一个更简单的方式,即-p参数,该参数可以用来对外公开在Dockerfile中通过EXPOSE指令公开的所有端口

25)查看宿主机与容器的映射关系

docker ps -l #可以查看端口映射

也可以通过docker port 查看

sudo docker port 容器id 或 容器名

或者

sudo docker port 镜像id 端口号(如80)

26)Dockerfile 指令

1.CMD

用于指定一个容器启动时要运行的命令.类似RUN指令是镜像被构建时要运行的命令,而CMD是指定容器被启动时要运行的命令

sudo docker run -t -i 用户名/仓库名 /bin/bash
相当于
sudo docker run -t -i 用户名/仓库名
+
CMD ["/bin/bash"]

2.WORKDIR

在容器内部设置一个工作目录,使得CMD指令会在这个目录下执行

WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp #最终工作目录设置为 /opt/webapp
CMD ["rackup"]

也可以通过-w标志在运行时覆盖工作目录

sudo docker run -t -i /var/log ubuntu pwd

该命令会将容器内的工作目录设置为/var/log

3.ENV

ENV指令用在镜像构建中设置环境变量

ENV RVM_PATH /home/rvm/

RVM_PATH即为一个环境变量

ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR

也可以通过-e标志在运行时来传递环境变量

sudo docker run -t -i -e "WEB_PORT=8080" ubuntu env

这些环境变量也会被持久化保存到 我们的镜像创建的任何容器中

在容器终端中运行env命令

可以查看环境变量

4.VOLUME

VOLUME指令用来向基于镜像创建的容器添加卷

  1. 卷可以在容器间共享和重用
  2. 一个容器可以不是必须和其他容器共享卷
  3. 对卷的修改是立即生效的
  4. 对卷的修改不会对更新镜像产生影响
  5. 卷会一直存在直到没有任何容器再使用

5.ADD

ADD指令用来将构建环境下的文件和目录复制到镜像中

文件复制

ADD source_file  target_file/to/path/source_file #构建目录下的source_file复制到镜像target_file/to/path/

目录复制

ADD source_file/to/path/  target_file/to/path/  #源文件目录位置 目的文件目录位置

指向源文件的位置参数可以试一个URL,或者构建上下文或者环境文件名或者目录

不能对构建目录或者上下文之外的文件进行ADD操作

使用URL作为文件源

ADD http://wordpress.org/latest.zip /root/wordpress.zip

另外如果将一个归档文件(gzio,bzip2,xz)制定为源文件,docker会自动将归档文件解开(unpack)

ADD latest.tar.gz /var/www/wordpress/

但docker不知道URL方式指定源位置中使用归档文件(书中所说,不确定现在是否更新)

6.COPY

COPY与ADD相似,不同的是COPY只关心在构建上下文中复制本地文件,而不会去做提取和解压工作,相当于缩水版ADD

同时COPY的复制路径必须是一个绝对路径,并且源路径必须以"/"结尾,这样docker会认为它是目录,如果目录不存在,docker会自动化递归的创建所需要的目录结构 相当于

mkdir -p  #递归的创建目录

 27)push 镜像到docker hub

这里按照书上步骤遇到了denied: requested access to the resource is denied问题

镜像构建完毕的时候 准备传入自己hub发现 被拒绝

报了denied: requested access to the resource is denied异常,意思是没有权限

解决的办法是:使用 docker tag改名字

docker tag REPOSITORY名字 dockerhub的"用户名/仓库名"

docker push "用户名/仓库名"

 28)Docker镜像保存save、加载load

(1)查看要要保存的镜像的ID

docker images

(2)保存镜像

docker save 镜像名/镜像id -o /home/wzh/docker/spring-boot-docker.tar

(3)加载镜像

docker load -i spring-boot-docker.tar  

解决方案 参考

https://stackoverflow.com/questions/41984399/denied-requested-access-to-the-resource-is-denied-docker

第一本Docker书读书笔记相关推荐

  1. 我的第一本算法书--读书笔记

    序–算法的基本知识 1.什么是算法 计算或解决问题的步骤. 算法和程序的区别 程序是以计算机能够理解的编程语言编写的,算法是以人能够理解的方式描述. 排序 排列整数的算法 选择排序 查找最小的数字并交 ...

  2. 《第一本Docker书(修订版)》——第1章_简介_1.1Docker简介

    摘要: 那么Docker有什么特别之处呢?Docker在虚拟化的容器执行环境中增加了一个应用程序部署引擎.该引擎的目标就是提供一个轻量.快速的环境,能够运行开发者的程序,并方便高效地将程序从开发者的笔 ...

  3. 我的第一本英文书读书心得

    我的第一本英文书读书心得 在研究Samba配置AD DC(Active Directory Domain Controller)的时候,查阅了大量的英文网站资料.偶然的关键词查询看到了Redhat官网 ...

  4. 第一本Docker书pdf

    下载地址:网盘下载 内容简介  · · · · · · 全球第一本Docker技术图书中文版,Docker中文社区鼎力支持! Docker核心团队成员权威著作,在技术圈中很有影响力. 既是第一本Doc ...

  5. 《机器学习》(周志华)西瓜书读书笔记

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 第1章 绪论 第2章 模型评估与选择 第3章 线性模型 第4章 决策树 第5章 神经网络 第6章 神经网络 第7章 贝 ...

  6. 花书读书笔记(十一)-应用

    全部笔记的汇总贴:<深度学习>花书-读书笔记汇总贴 一.大规模深度学习 快速的 CPU 实现 GPU 实现:是为图形应用而开发的专用硬件组件. 大规模的分布式实现:数据并行.模型并行.异步 ...

  7. 《 第一本Docker书 》读书笔记 --- Docker 各项操作命令及参数说明(docker run 命令各个参数说明)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. PS :个人所有读书笔记只记录个人想要的内容,很可能原书大量内容没有纳入笔记中... ... 1. ...

  8. 《Java: The Complete Reference》等书读书笔记

    春节期间读了下<Java: The Complete Reference>发现这本书写的深入浅出,我想一个问题,书中很多内容我们也知道,但是为什么我们就写不出这样一本书,这么全面,这么系统 ...

  9. 20220509数据结构绿书读书笔记

    20220509 数据结构读书笔记 全书目录如下 1.编程原则 2.栈 3.队列 4.链栈&队列 5.回溯 6.列表和串 7.搜索 8.排序 9.表格与信息检索 10.二叉树 11.多叉树 1 ...

最新文章

  1. 报错解决:undefined reference to `snappy::MaxCompressedLength(unsigned long)'
  2. 国产WEB漏洞测试平台——MST
  3. iomem—I/O映射方式的I/O端口和内存映射方式的I/O端口
  4. P4083-[USACO17DEC]A Pie for a Pie G【线段树,最短路】
  5. Team Foundation Server 2010 安装、部署与配置(五):用户权限管理 .
  6. 内存问题排查手段及相关文件介绍
  7. 2个表 遍历 组合_7.2 图的存储结构(2)
  8. android 卡片收缩展开,jQuery和CSS3炫酷堆叠卡片展开和收缩特效
  9. python内置模块在哪个文件夹_用 Python 内置模块处理 ini 配置文件
  10. 中国最惨创业者的惨痛教训!
  11. 怎么把pdf文件转换成word文件
  12. zabbix创建自定义监控项
  13. eova开发几个低级问题
  14. TranslateAnimation详解
  15. 域策略(3)——限制用户使用USB移动存储设备
  16. java贪吃蛇碰撞判定分析_java贪吃蛇碰撞检测
  17. 使用MobaXterm tunneling访问集群(服务器)jupyter notebook
  18. 阿里云培训-负载均衡(CLB/ALB)
  19. FOC控制笔记 -基本术语概念
  20. UVa1600 习题6-5 巡逻机器人 (Patrol Robot,ACM/ICPC Hanoi 2006)

热门文章

  1. Qt5 QAudioOutput+QIODevice 播放固定频率的声音
  2. 计算机设备维护登记表,各种设备维护保养记录表格
  3. 用atmega16编程十位数计算机,AVR单片机(学习ing)—(九)、ATMEGA16的模数转换器—01...
  4. 一周搞定scrapy之第一天--爬取起点中文小说网
  5. java 字符串 数字个数_Java简单统计字符串中汉字,英文字母及数字数量的方法...
  6. 外汇天眼:了解外汇市场交易中的流动性
  7. CentOS安装 xmms
  8. Linux expr 命令详解
  9. 时间类Carbon的安装和使用
  10. 适合小白入行IT的几种编程语言