生命周期管理
run
创建并启动新容器, 可选择启动参数
docker run (启动参数) 镜像名
启动参数如下
-itd
参数 | 含义 |
---|---|
-i |
以交互模式运行容器 |
-t |
为容器重新分配一个伪输入终端 |
-d |
后台运行并返回容器ID |
- 示例, 交互模式启动容器, 分配终端后台运行
docker run -itd --rm alpine
–name
给容器命名
--name=容器名
- 示例, 命名新建容器self_alpine
docker run -itd --rm --name=test alpine
-p/–publish
将容器内部端口映射到宿主机端口, 允许外部网络访问容器内部
-p 主机端口:容器端口
- 示例, 将主机7890端口映射至容器80端口
外部可通过主机7890端口访问容器80端口
docker run -itd -p 7890:80 nginx
–net
指定容器网络连接类型
--net 网络类型
支持 bridge(默认), host, none, container四种类型
-e/–env
设置容器环境变量
-e 名称=值
- 示例, 设置mysql用户密码
docker run -it --rm -e MYSQL_ROOT_PASSWORD=123 mysql:5.6
- 示例, 设置容器中环境变量TEST_VEN值abcdefg
docker run -it --rm -e TEST_VEN=abcdefg alpine
-v/–volume
挂载本地目录或卷到容器内
-v 宿主机目录路径:容器目录路径:(可选挂载选项, ro为只读, 默认rw读写权限)
- 示例, 挂载本地self_test到容器中
–mount
挂载本地绝对路径目录到容器中
--mount type=挂载类型,source=挂载源,target=容器内挂载路径,(options)
graph LR;
P(参数)
P-->Type(type)
Type-->Type1(bind 绑定挂载)
Type-->Type2(volume Docker卷)
Type--> Type3(tmpfs 临时文件系统)
P-->Source(source)
Source-->Source1(bind类型)-->Source11(宿主机目录路径)
Source-->Source2(volume类型)-->Source21(Docker卷名)
P-->Target(target)-->Target1(容器内挂载路径)
P-->Options(options 挂载选项)
Options-->Options1(readonly 只读)
Options-->Options2(consistency 一致性)
- 示例, 将本地${HOME}/Documents/code/挂载到容器/code, 权限为只读
docker run -it --rm --mount type=bind,source="${HOME}/Documents/code/",target="/code/",readonly busybox
–restart
设置容器重启策略
-restart=always
使得容器在退出时总是重启
–privileged
给予容器内进程几乎与宿主机root用户等同的权限
–rm
容器退出后自动删除容器和其中文件系统
- 示例, 创建自动删除容器
start/stop/restart
启动、停止和重启容器
start
docker start 容器名/ID
stop
docker stop 容器名/ID
kill
立即终止一或多个正在运行容器
docker kill 容器名/ID
rm
删除一或多个已经停止容器
正常删除
docker rm 容器名/ID
强制删除
docker rm -f 容器名/ID
批量删除
删除所有容器
docker rm $(docker ps -aq)
先停用删除
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
删除异常容器
docker rm $(docker ps -a | grep Exited | awk '{print $1}')
pause/unpause
暂停和恢复容器中所有进程
exec
在运行中容器内执行命令
docker exec (参数) 镜名/ID 命令
graph LR;
P(参数)
P-->I("-i")-->I1(保持STDIN打开)
P-->T("-t")-->T1(分配一个伪终端)
P-->D("-d")-->D1(分离模式, 在后台运行)
- 示例, busybox容器创建test/
进入容器
docker exec -it 容器名/ID shell解释器
多指令
docker exec (参数) 容器名/ID shell解释器 -c '命令1 && 命令2'
- 示例, ubuntu安装mysql-clinet
docker run -itd --name=ubuntu_test ubuntu:18.04
docker exec -it ubuntu_test bash -c 'apt-get update && apt-get install -y mysql-client'
rename
重命名容器
操作
ps
列出容器
docker ps (-a, 所有容器)
第一列哈希值表示容器ID
inspect
获取docker对象(容器、镜像、卷、网络等)详细信息
IP地址
docker inspect 容器名/ID | grep IPAddress
- 示例, 查看容器IP
获取容器ID
$(docker ps | grep "容器名" | awk '{print $1}')
# 或者
$(docker ps -aqf "name=容器名")
参数 | 说明 |
---|---|
a | 即使容器没运行也能获取 |
q | 仅输出容器ID |
f | filter |
export/import
打包容器
docker export 容器名/ID 压缩包.tar
加载容器
docker import 压缩包.tar 容器名/ID:tag
文件系统
cp
用于宿主机与容器之间文件拷贝
宿主机拷贝到容器
docker cp 宿主机路径 容器名/ID:容器内路径
- 示例, 拷贝宿主机cmake_test到容器5d6..根目录下
容器拷贝到宿主机
docker cp 容器名/ID:容器内路径 宿主机路径
- 示例, 拷贝容器5d6… /dev目录到宿主机当前路径
commit
将指定容器提交为镜像
docker commit -a (作者信息) -m (提交信息) 容器名/ID 目标镜像名:(tag)
- 示例, 将容器bdfb176f914a提交为镜像self_image:v0.1
diff
显示docker容器文件系统变更
docker-compose
docker compose是一个工具, 用于定义和运行多容器docker应用程序
安装
下载对应docker-compose二进制文件, 移动到/usr/local/bin/下
创建
- 示例, 创建docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
app:
image: node:12
working_dir: /app
volumes:
- .:/app
command: npm start
depends_on:
- web
web服务使用nginx镜像, 并映射主机80端口到容器80端口, 还挂载一个本地nginx.conf文件到容器中配置目录
app服务使用Node.js镜像, 设置工作目录, 挂载当前目录到容器中, 执行npm start命令
app服务依赖于web服务启动
命令
启动应用程序
在docker-compose.yml文件当前目录执行
docker-compose up -d
以后台模式启动所有服务
查看服务状态
docker-compose ps
停止服务
docker-compose stop
重启服务
docker-compose restart
构建
使用自定义Dockerfile构建镜像
docker-compose build
删除应用程序
docker-compose rm
查看日志
docker-compose logs
服务执行命令
docker-compose exec 服务名称 命令
删除
停止移除所有容器、网络和卷
docker-compose down