二、Docker容器基础管理
一、替换镜像的仓库
编辑 /etc/docker/daemon.json文件(不存在),加入阿里云的镜像
{ "registry-mirrors": ["https://n6syp70m.mirror.aliyuncs.com"] }
二、容器命令基础
①查看系统信息
> docker system info 或者 > docker info
执行之后会产生如下信息:
像上图,可以看到当前docker中容器数量是3个,并且3个都停止了。
②查看帮助手册
> docker help
docker 1.13之后,为了方便命令的管理,分为了Management Commands 和 Commands,就像上面获取系统信息的的两个命令分别是Management Command 和 Command两者是兼容的,下面是一些常用命令的对应关系。
③命令选项
上图中可以看到 Options,这里面有 -v --version 这样的命令,
-叫做短选项
--叫做长选项
-a -q 如果组合到一起 -aq 就称为复合选项
如果什么都不写就是无选项
三、容器的生命周期管理
1.创建容器
A. docker run 命令
# Management Commands
$ docker container run [OPTIONS] IMAGE [COMMAND [ARGS...]]
# 旧命令格式如下:
$ docker run [OPTIONS] IMAGE [COMMAND [ARGS...]]
docker container run 命令会在指定的镜像 IMAGE 上创建一个可写的容器(因为镜像是只读的),然后开始运行指定的命令 [COMMAND [ARGS...]]。
-i 或 --interactive, 交互模式
-t 或 --tty, 分配一个 pseudo-TTY,即伪终端
--rm 在容器退出后自动移除
-p 将容器的端口映射到主机
-v 或 --volume, 指定数据卷
举例:
[root@TBEARZ206458 ~]# docker container run busybox echo "hello xxx"
Unable to find image 'busybox:latest' locally latest:
Pulling from library/busybox bdbbaa22dec6:
Pull complete Digest:
sha256:6915be4043561d64e0ab0f8f098dc2ac48e077fe23f488ac24b665166898115a Status:
Downloaded newer image for busybox:latest
hello xxx
本地找镜像【busybox】找不到然后没从镜像仓库下载,然后运行。
什么是BusyBox镜像:https://blog.csdn.net/chengqiuming/article/details/79313539
在执行命令之后,容器就会退出,如果我们需要一个保持运行的容器,最简单的方法就是给这个容器一个可以保持运行的命令或者应用
对于交互式的进程而言(例如这里的 bash),必须将 -i 和 -t 参数一起使用,才能为容器进程分配一个伪终端,
通常我们会直接使用 -it 做交互
通常以 -d 参数指定容器以后台模式运行
举例:运行一个Ubuntu的镜像
[root@TBEARZ206458 ~]# docker container run -it ubuntu /bin/bash
root@ec2ee18aded3:/#
ec2ee18aded3 是容器的ID,可以通过 docker container ls -a 查看所有容器
[root@TBEARZ206458 ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec2ee18aded3 ubuntu "/bin/bash" 15 minutes ago Up 13 minutes exciting_morse
B.docker Create 命令
docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。
# Management Commands
$ docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 旧的命令格式如下:
$ docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
该命令执行之后,会创建一个可执行的容器,但是不是马上执行。
l --name 指定一个容器名称,未指定时,会随机产生一个名字
l --hostname 设置容器的主机名
l --mac-address 设置 MAC 地址
l --ulimit 设置 Ulimit 选项
我们可以通过其对容器运行时的一些资源进行限制。
ulimit 可以参考 https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ ,而对于在下面我们将要设置的部分值的含义,可以参考 https://access.redhat.com/solutions/61334 。
举例:
[root@TBEARZ206458 ~]# docker container create \ >--name TestUbuntu \ >--hostname TestUbuntuHostName \ >--mac-address 01:02:03:04:05:06 \ >--ulimit nproc=1024:2048 \ >-it ubuntu /bin/bash
创建完成之后会生成一个很长的ID:
对应的使用 docker container ls -a 可以看到所有的容器信息: 是Create状态
2.容器的启动与停止
启动
# Management Commands
$ docker container start [OPTIONS] CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker start [OPTIONS] CONTAINER [CONTAINER...]
停止
# Management Commands
$ docker container stop CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker stop CONTAINER [CONTAINER...]
重启
# Management Commands
$ docker container restart CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker restart CONTAINER [CONTAINER...]
举例:创建一个容器,并启动、关闭、重启。
创建 [root@TBEARZ206458 ~]# docker container create --name MyContainer --hostname MyContainerHostName -it ubuntu /bin/bash 78e90b182e622174cd1028b00ec5efe5a8d572e70787279e84a36abd539b85a4 [root@TBEARZ206458 ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e90b182e62 ubuntu "/bin/bash" 9 seconds ago Created MyContainer c77f432bc04b ubuntu "/bin/bash" 27 minutes ago Created TestUbuntu ec2ee18aded3 ubuntu "/bin/bash" About an hour ago Exited (0) 3 minutes ago exciting_morse [root@TBEARZ206458 ~]# docker container start MyContainer MyContainer [root@TBEARZ206458 ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e90b182e62 ubuntu "/bin/bash" 51 seconds ago Up 2 seconds MyContainer c77f432bc04b ubuntu "/bin/bash" 28 minutes ago Created TestUbuntu ec2ee18aded3 ubuntu "/bin/bash" About an hour ago Exited (0) 3 minutes ago exciting_morse [root@TBEARZ206458 ~]# docker container stop MyContainer MyContainer [root@TBEARZ206458 ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e90b182e62 ubuntu "/bin/bash" About a minute ago Exited (0) 2 seconds ago MyContainer c77f432bc04b ubuntu "/bin/bash" 28 minutes ago Created TestUbuntu ec2ee18aded3 ubuntu "/bin/bash" About an hour ago Exited (0) 4 minutes ago exciting_morse [root@TBEARZ206458 ~]# docker container restart MyContainer MyContainer [root@TBEARZ206458 ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e90b182e62 ubuntu "/bin/bash" About a minute ago Up 1 second MyContainer c77f432bc04b ubuntu "/bin/bash" 29 minutes ago Created TestUbuntu ec2ee18aded3 ubuntu "/bin/bash" About an hour ago Exited (0) 4 minutes ago exciting_morse
综上 docker run 命令实际上是一个组合的操作,创建并启动
3.容器中进程的暂停与恢复
暂停容器进程
# Management Commands
$ docker container pause CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker pause [OPTIONS] CONTAINER [CONTAINER...]
举例暂停
[root@TBEARZ206458 ~]# docker container pause MyContainer MyContainer [root@TBEARZ206458 ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e90b182e62 ubuntu "/bin/bash" 2 hours ago Up 2 hours (Paused) MyContainer c77f432bc04b ubuntu "/bin/bash" 2 hours ago Created TestUbuntu ec2ee18aded3 ubuntu "/bin/bash" 3 hours ago Exited (0) 2 hours ago exciting_morse
恢复容器进程
# Management Commands
$ docker container unpause CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker unpause [OPTIONS] CONTAINER [CONTAINER...]
举例 恢复
[root@TBEARZ206458 ~]# docker container unpause MyContainer MyContainer [root@TBEARZ206458 ~]# docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 78e90b182e62 ubuntu "/bin/bash" 2 hours ago Up 2 hours MyContainer c77f432bc04b ubuntu "/bin/bash" 2 hours ago Created TestUbuntu ec2ee18aded3 ubuntu "/bin/bash" 3 hours ago Exited (0) 2 hours ago exciting_morse
4.查看容器列表
刚刚已经实践过了
# Management Commands
$ docker container ls [OPTIONS]
# 旧的命令格式如下:
$ docker ps [OPTIONS]
常用参数
-a 显示所有的容器
-q 仅显示 ID
-s 显示总的文件大小
5.连接到容器中
容器一般运行于后台中,需要使用 attach 操作将本地标准输入输出流连接到一个运行中的容器
# Management Commands $ docker container attach [OPTIONS] CONTAINER # 旧的命令格式如下: $ docker attach [OPTIONS] CONTAINER
举例:
[root@TBEARZ206458 ~]# docker container attach MyContainer root@MyContainerHostName:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@MyContainerHostName:/#
6.查看元数据
# Management Commands $ docker container inspect [OPTIONS] CONTAINER [CONTAINER...] # 旧的命令格式如下: $ docker inspect [OPTIONS] CONTAINER [CONTAINER...]
举例:
[root@TBEARZ206458 ~]# docker container inspect MyContainer | grep Name "Name": "/MyContainer", "Name": "no", "Name": "overlay2" "Hostname": "MyContainerHostName", [root@TBEARZ206458 ~]#
7.显示进程信息
显示运行中的容器的进程信息
# Management Commands $ docker container top CONTAINER # 旧的命令格式如下: $ docker top CONTAINER
举例:
[root@TBEARZ206458 ~]# docker container top MyContainer UID PID PPID C STIME TTY TIME CMD root 24171 24155 1 14:09 ? 00:00:00 /bin/bash
8.查看文件修改
# Management Commands $ docker container diff CONTAINER # 旧的命令格式如下: $ docker diff CONTAINER
主要是用于对比容器前后的改变
举例: 在容器中创建一个文件,并对比改变
[root@TBEARZ206458 ~]# docker container attach MyContainer
root@MyContainerHostName:/# touch A.txt
root@MyContainerHostName:/# exit
[root@TBEARZ206458 ~]# docker container diff MyContainer
A /A.txt
C /root
A /root/.bash_history
A代表 Add
C代表 Change
9.容器中执行命令
除了使用 docker container run 执行命令之外,我们还可以在一个运行中的容器中执行命令,使用如下格式:
$ docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
举例
[root@TBEARZ206458 ~]# docker container exec MyContainer echo "DSB" DSB
10.删除容器
# Management Commands
$ docker container rm [OPTIONS] CONTAINER [CONTAINER...]
# 旧的命令格式如下:
$ docker rm [OPTIONS] CONTAINER [CONTAINER...]
举例删除掉所有的容器,包含运行当中的
[root@TBEARZ206458 ~]# docker container rm -f $(docker container ls -aq) c77f432bc04b ec2ee18aded3