Docker容器


创建容器

新建容器

1
2
3
docker create -it ubuntu:latest

docker ps -a

1.png

2.png

此命令新建一个容器,处于停止状态

启动容器

1
docker start container_id

3.png

启动一个已经创建的容器

新建并启动容器

1
2
3
4
docker run -it name:tag /bin/bash

-i:保持标准输入打开
-t: 分配一个伪终端

4.png

相当于先执行docker create命令,再执行docker start命令

当使用docker run来创建并启动容器时,Docker在后台运行的标准操作包括:

​ 1.检查本地是否存在本地镜像,不存在就从公有仓库下载

​ 2.利用镜像创建一个容器,并启动该容器

​ 3.分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层

​ 4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中

​ 5.从网桥的地址池中配置一个IP地址给容器

​ 6.执行用户指定的应用程序

​ 7.执行完毕后容器被自动终止

守护态运行

1
2
3
4
docker run -d name:tag /bin/bash -c ""

-d:守护态运行
-c:执行动作

5.png

6.png

返回容器唯一id

1
docker logs container_id

7.png

指定容器id来获取容器的输出信息


终止容器

1
2
3
docker stop [-t] container_id

-t:设置延迟时间,默认10秒

8.png

​ 首先向容器发送SIGTERM信号,等待延时时间后,再发送SIGKILL信号终止容器。

1
docker kill container_id

​ 直接向容器发送SIGKILL信号来终止容器

当Docker中指定的应用终结时,容器也会自动终止,处于Exited状态

启动终止状态的容器

1
docker start container_id

9.png

重启容器

1
docker restart container_id

10.png

11.png


进入容器

对于守护态运行的容器而言

122.png

attach命令

1
2
3
4
5
docker attach [--detach-keys[=[]]] [--on-stdin] [--sig-proxy[=true]] container_id

--detach-keys[=[]]:指定退出attach模式的快捷键序列
--on-stdin:是否关闭标准输入,默认打开
--sig-proxy=true|false:是否代理收到的系统信号给应用进程,默认为true

12.png

当多个窗口同时使用attach命令连到同一个容器时,所有窗口同步显示。

exec命令(推荐)

1
2
3
4
5
6
7
8
docker exec [option] container_id COMMAND

-i,--interactive=true|false:打开标准输入接收用户指令,默认false
--privileged=true|false:是否执行命令以最高权限,默认为false
-t,--tty=true|false:分配伪终端,默认为false
-u,--user="":执行命令的用户名或ID

docker exec -it container_id /bin/bash

13.png

nsenter工具

使用nsenter连接到容器,需要找到容器进程的PID

1
PID=$(docker inspect -f "{{ .State.Pid }}" container_id)

连接容器

1
nsenter --target $PID --mount --uts --ipc --net --pid

举例

19.png

20.png

21.png


删除容器

删除处于终止或退出状态的容器

1
2
3
4
5
docker rm [option] container_id...

-f,--force-false:是否强行终止并删除一个运行中的容器
-l,--link=false:删除容器的连接,但保留容器
-v,--volumes=false:删除容器挂载的数据卷

15.png


导入和导出容器

导入容器

导出一个已创建的容器到一个文件,无论此容器是否处于运行状态

1
2
3
4
5
6
docker export [-o|--output[=""]] container_id

-o,--output:指定导出的tar文件名

docker export -o a.tar ce5
docker export ce5 > a.tar

16.png

17.png

导入容器

1
2
3
4
5
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [NAME[:TAG]]

-c,--change=[]:导入的同时执行对容器进行修改的Dockerfile指令

docker import a.tar test/ubuntu:v1

18.png

​ 实际上,既可以使用docker load命令导入镜像存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库

​ 两者的区别在于容器快照文件将丢失所有的历史纪录和元数据信息,用户可重新指定标签等元数据信息。而镜像存储文件将保存完整的记录。体积也更大。

---------------The End---------------
0%