下面使用 CentOS 7 系统介绍Docker:
centos7下安装docker:
yum -y install docker
复制
一、Docker 镜像
Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会从镜像仓库下载( 默认是Docker Hub 公共注册服务器中的仓库 )
查看系统镜像
docker images
从官方源搜索镜像 (前提 物理机可以连通外网)
docker search 镜像名
下载镜像
docker pull 镜像名
上传镜像
docker push 镜像名
删除本地镜像
docker rmi 镜像名
把本机镜像备份为 tar 包
docker save 镜像名 > 镜像名.tar
把备份的 tar 包导入到本地镜像
docker load < 镜像名.tar
查看镜像制作历史
docker history
查看镜像底层信息
docker inspect
修改镜像名称和标签
docker tag
复制
这里用 busybox 练习
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
# docker search busybox
# docker pull busybox
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest f9b6f7f7b9d3 6 days ago 1.143 MB
在列出的信息中 可以看到几个字段信息
来自于哪个仓库,比如 busybox
镜像标记,比如 latest
它的 ID 号 唯一
创建时间
镜像大小
# docker save busybox > busybox.tar
# ls busybox.tar
busybox.tar
# docker rmi busybox
# docker load < busybox.tar
779f37a09c89: Loading layer 1.355 MB/1.355 MB
Loaded image: busybox:latest
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest f9b6f7f7b9d3 6 days ago 1.143 MB
# docker history busybox
IMAGE CREATED CREATED BY SIZE COMMENT
f9b6f7f7b9d3 6 days ago /bin/sh -c #(nop) CMD ["sh"] 0 B
<missing> 6 days ago /bin/sh -c #(nop) ADD file:3e663b99b5cb560010 1.143 MB
复制
镜像的实现原理复制
Docker 使用Union FS 将这些不同的层结合到一个镜像中去。
通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,LiveCD正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。Docker 在 AUFS上构建的容器也是利用了类似的原理。
二、Docker 容器
容器是独立运行的一个或一组应用,以及它们的运行态环境。
对应的虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
容器常用命令列表:
– docker run //运行容器
– docker ps //查看容器列表
– docker stop //关闭容器
– docker start //启动容器
– docker restart //重启容器
– docker attach|exec //进入容器
– docker inspect //查看容器底层信息
– docker top //查看容器进程列表
– docker rm //删除容器
复制
启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态的容器重新启动.
新建并启动
命令主要为docker run
例如 下面命令输出一个'Hello world' 之后终止容器
# docker run centos /bin/echo 'Hello world'
Hello world
下面的命令则启动一个 bash 终端,允许用户进行交互。
# docker run -it centos /bin/bash
[root@b45c34328e05 /]#echo Hello world
Hello world
[root@b45c34328e05 /]# ls
anaconda-post.log dev home lib64 media opt root sbin sys usr
bin etc lib lost+found mnt proc run srv tmp var
[root@b45c34328e05 /]# exit
exit
-t 选项 让Docker分配一个伪终端 并绑定到容器的标准输入上
-i 选项 则让容器的标准输入保持打开
复制
启动已终止容器
可以利用 docker start 命令 直接将一个已经终止的容器启动运行
使用 docker ps 命令查看容器信息
终止状态的容器可以用 docker ps -a 看到
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b45c34328e05 centos "/bin/bash" 47 seconds ago Exited (0) 40 seconds ago sharp_carson
# docker start b45c34328e05
b45c34328e05
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b45c34328e05 centos "/bin/bash" About a minute ago Up 5 seconds sharp_carson
复制
后台运行
需要让Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下
可以docker run 添加 -d 参数来实现 启动后会返回唯一的 id
使用 docker ps 命令查看容器信息
终止状态的容器可以用 docker ps -a 看到
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b45c34328e05 centos "/bin/bash" 47 seconds ago Exited (0) 40 seconds ago sharp_carson
# docker start b45c34328e05
b45c34328e05
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b45c34328e05 centos "/bin/bash" About a minute ago Up 5 seconds sharp_carson
复制
终止容器
可以使用 docker stop 来终止一个运行中的容器
当Docker 容器中指定的应用终结时,容器也自动终止,用户通过exit 命令 或者 Ctrl + d 来退出终端时,所创建的容器立刻终止。
# docker stop 3a5f
3a5f
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b45c34328e05 centos "/bin/bash" 45 minutes ago Up 44 minutes sharp_carson
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a5f25a93754 centos "/bin/sh -c 'while tr" 15 minutes ago Exited (137) 42 seconds ago happy_goldstine
# docker restart 3a5f
3a5f
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a5f25a93754 centos "/bin/sh -c 'while tr" 16 minutes ago Up 4 seconds happy_goldstine
centos "/bin/sh -c 'while tr" 16 minutes ago Up 4 seconds happy_goldstine
复制
此外,docker restart 命令会将一个运行态的容器终止,然后再重新启动它
进入容器
在使用 -d 参数时,容器启动会进入后台。某些时候需要进入容器进行操作
attach 命令
# docker run -idt centos
7cc5abd320d6e67cc8df2388e840bb168715afd3331364514be91e42be0d7304
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cc5abd320d6 centos "/bin/bash" 7 seconds ago Up 4 seconds high_lamarr
# docker attach 7cc
[root@7cc5abd320d6 /]#
[root@7cc5abd320d6 /]# exit
exit
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7cc5abd320d6 centos "/bin/bash" 3 minutes ago Exited (0) 13 seconds ago high_lamarr
复制
复制
但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执操作了。exit 会导致容器关闭
exec 命令
进入容器,退出时不会关闭容器
# docker run -idt centos
f433775528d9616212145b73cc10a04b5b8c0f383c9cd002fe1f6dc984462313
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f433775528d9 centos "/bin/bash" 7 seconds ago Up 5 seconds berserk_bassi
# docker exec -it f4 /bin/bash
[root@f433775528d9 /]#
[root@f433775528d9 /]# exit
exit
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f433775528d9 centos "/bin/bash" 3 minutes ago Up 3 minutes berserk_bassi
-i ,-t , -d 参数
-i 选项 则让容器的标准输入保持打开
-t 选项 让Docker分配一个伪终端 并绑定到容器的标准输入上
-d 选项 在后台执行一个进程。可以看出,如果一个命令需要长时间进程,使用-d参数会很快返回。
# docker exec -i f4 /bin/bash
date
Tue Jan 23 12:15:21 UTC 2018
echo $?
0
exit
# docker exec -t f4 /bin/bash
[root@f433775528d9 /]# date
^C
# docker exec -it f4 /bin/bash
[root@f433775528d9 /]# date
Tue Jan 23 12:18:21 UTC 2018
[root@f433775528d9 /]# exit
exit
复制
删除容器
可以使用 docker rm 来删除一个处于终止状态的容器
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f433775528d9 centos "/bin/bash" 29 minutes ago Up 29 minutes berserk_bassi
7cc5abd320d6 centos "/bin/bash" 34 minutes ago Exited (0) 32 minutes ago high_lamarr
# docker rm 7cc
7cc
# docker rm f43
Error response from daemon: You cannot remove a running container f433775528d9616212145b73cc10a04b5b8c0f383c9cd002fe1f6dc984462313. Stop the container before attempting removal or use -f
# docker rm -f f43
f43
复制
如果要删除一个运行中的容器,可以添加 -f 参数
清理所有处于终止状态的容器
如果数量太多要一个个删除可能会很麻烦,用
docker rm $( docker ps -aq )
复制
可以全部处理掉。
文章转载自:https://blog.51cto.com/u_13558754/2064405 作者:Xuenqlve
后续将继续分享docker生产实践案例,敬请关注下方公众号!