介绍
Docker 容器是用于运行镜像的沙箱环境,它是 Docker 镜像的运行实例;容器都是相互隔离、互不可见的,我们可以理解为:镜像是Docker生命周期的打包和构建阶段,而容器是Docker的启动和执行阶段。
容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。
镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。
运行容器
使用 docker run 命令来运行一个容器
格式:
1 | $ docker run [OPTIONS] IMAGE [COMMAND] [ARG...] [flags] |
OPTIONS说明:
由于 docker run 命令 OPTIONS 比较多,这里只选择大家常用的几个选项来说明
-i, --interactive=false 打开STDIN,用于控制台交互
-t, --tty 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-d, --detach=false 指定容器运行于前台还是后台,默认为false
-p, --publish list 指定主机的端口和容器端口的映射
-P, --publish-all 使用容器内随机一个网络端口映射到我们使用的主机上
-v, --volume list 给容器挂载存储卷,挂载到容器的某个目录
-m, --memory 指定容器的内存上限
--link list 指定容器间的关联,使用其他容器的IP、env等信息
-e, --env list 设置环境变量
--restart string 指定容器的重启策略
示例:
后台运行一个nginx
1 | $ docker run --name mynginx -p 8088:80 -v $PWD/nginx/www:/www -v $PWD/nginx/logs:/wwwlogs -d nginx |
查看运行的容器
- 查看正在运行的容器
1 | $ docker ps |
- 查看所有容器(包含正在运行和退出的容器)
1 | $ docker ps -a |
- 查看容器的详细信息
1 | $ dokcer inspect mygnix |
进入容器
使用 docker exec 命令进入容器
格式:
1 | $ docker exec [OPTIONS] CONTAINER COMMAND [ARG...] |
OPTIONS说明:
-d, --detach 分离模式: 在后台运行
-i, --interactive 即使没有附加也保持STDIN 打开
-t, --tty 分配一个伪终端
-e, --env list 设置环境变量
示例:
以交互模式进入容器
1 | $ docker exec -it mynginx /bin/bash |
停止和重启容器
如果是交互式运行的一个容器,可以通过exit命令和Ctrl+d来退出终端,这样容器会立刻终止
1 | # exit 直接退出,容器终止;或者快捷键Ctrl+d |
使用 docker stop 命令来停止正在运行的容器
格式:
1 | $ docker stop [OPTIONS] CONTAINER [CONTAINER...] |
示例:
指定容器名称停止正在运行的多个容器
1 | $ docker stop mynginx myredis |
重新启动容器
1 | # 启动终止的容器 |
删除容器
使用 docker rm 命令删除一个或多个容器
格式:
1 | $ docker rm [OPTIONS] CONTAINER [CONTAINER...] |
OPTIONS说明:
-f, --force 强制删除
-l, --link 移除容器间的网络连接,而非容器本身
-v, --volumes 删除与容器关联的卷
示例:
强制删除容器mynginx
1 | $ docker rm -f mynginx |
删除mygninx,并删除容器挂载的数据卷
1 | $ docker rm -v mynginx |
强制删除所有的容器
1 | $ docker rm -f $(docker ps -aq) |
删除容器使用 docker rm 命令 而 删除容器使用 docker rmi 命令,注意两者区别
导出容器
使用命令 docker export 导出本地某个容器
1 | # 查看容器列表 |
导入容器
使用命令 docker import 从快照文件中导入为镜像
1 | cat mynginx.tar.gz | docker import - sqgulj/nginx:2.0 |