Docker 容器
创建(启动)容器
INFO
有人把 “从镜像创建容器” 和 ”从停止状态的容器启动“ 都叫做启动容器。这里我做了区分,把”从镜像创建容器“ 过程叫做创建容器。
docker run命令
通过docker run命令可以从镜像中创建一个容器或成为实例。 例如:
shell
docker run -d --name 别名 imageName
ps: -d 表示后台运行 注意: docker run命令可以添加很多参数,比如映射端口、映射路径等等。
run命令参数
- **-d:**以后台模式运行容器。
- **-i:**允许你与容器的标准输入进行交互。
- **-t:**分配一个伪终端 (TTY)。
- **--name:**为容器指定一个自定义名称。
- **--rm:**容器退出时自动删除容器。
- -**e:**设置环境变量。
- **--network:**连接容器到指定的网络。
- -p:将容器端口映射到主机端口。
- --volume 或 -v:将主机文件或目录挂载到容器中。
- **--link:**连接一个容器到另一个容器。
- **--restart:**设置容器的重启策略。
- **--user:**指定容器运行的用户名或 UID。
- **--privileged:**给容器赋予特权。
- --entrypoint:覆盖容器的默认入口点。
- **--env-file:**从文件中读取环境变量。
- **--label:**为容器添加元数据标签。
- **--detach-keys:**覆盖分离键的设置。
- **--log-driver:**指定容器的日志驱动程序。
- **--log-opt:**设置容器的日志选项。
- **--ulimit:**设置容器的 ulimit 值。
常用命令参数
- **--name **: 为容器指定一个自定义名称
shell
docker run --name myRedis redis:laste
- **-d:**以后台模式运行容器。
shell
docker run -d --name myRedis redis:laste
- --rm:容器退出时自动删除容器。
- 这个也挺有用的,有时候我们临时启动一个工具包镜像就可以这样
shell
docker run -t --rm imageName
运行后交互式终端操作,退出时删除容器
- -e:设置环境变量
- 比如mysql镜像需要设置环境变量用于配置root账号和密码
shell
docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
- --volume 或 -v:将主机文件或目录挂载到容器中。(对于一些镜像应该强制使用)
- 比如把mysql的数据文件映射到宿主机中,这样数据不会随着容器销毁而丢失
shell
docker run -d -v /host-data:/container-data myapp
-v /宿主机:/容器
- **--restart:**设置容器的重启策略。
shell
docker run --restart=always -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
- -p:将容器端口映射到主机端口。(最常用)
shell
docker run --restart=always -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql
-p 宿主机指定一个端口:容器内服务端口
- 将正在运行的容器删除
shell
docker rm -f xxxxx
容器操作
- 查看容器
shell
docker ps
docker ps -a
- 停止容器
shell
docker stop containerId
- 删除容器
- 删除容器时请确保不会数据丢失,数据文件已映射到宿主机上
shell
docker rm containerId
- 启动容器
shell
docker start containerId
- 进入容器
shell
docker exec -it 容器 /bin/bash
docker exec -it 容器 bash
- 退出容器
shell
exei
- 复制文件到宿主机
shell
docker cp 容器id或name:/容器内路径 宿主机路径
- 从宿主机复制文件到容器内
shell
docker cp 宿主机文件 容器:/路径
执行容器内服务的命令
有时候我们需要执行容器内服务的命令,比如nginx重新加载配置文件。可以通过重启容器来完成,但是这样不够优雅,这会导致服务短暂的无法访问,如果配置文件有问题会导致无法启动。
- 命令格式
shell
docker exec -it 容器名称或id 服务命令 参数
- 例如:nginx,// 检查配置文件是否正常
shell
[root@xxxxx ~]#docker exec -it nginx nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
这里出现两个nginx,第一个nginx表示容器名称,也可以替换为容器的id,第二个nginx是容器内nginx服务
- 重新加载nginx
shell
docker exec -it nginx nginx -s reload
容器导入导出
- 导出容器
- 这样将导出容器快照到本地文件。
shell
docker export 7691a814370e > ubuntu.tar
- 导入容器
shell
docker import my_container.tar my_imported_image
这将创建一个新的镜像,名称为 my_imported_image,其文件系统是从之前导出的 tar 文件中导入的。
从容器提交新镜像
- 提交容器为镜像
shell
docker commit <container_id> <new_image_name>
这中方式是将容器保存为新的镜像而而不是为本地文件。
注意
INFO
关于镜像的导入导出、容器的导入导出、容器提交新镜像。这三种区别
- 镜像的导入导出: 是将镜像导出为tar本地文件,可以方便移动到其它服务器上
- 容器的导入导出: 这是将正在运行的容器导出为本地文件,在其它服务器上可以导入为镜像
- 容器提交为镜像: 这是在本机上操作,将正常运行的容器提交为一个镜像。