Docker命令
Docker 是一个开源的容器引擎,核心概念(镜像、容器、仓库)和版本演进详见 Docker。本文整理安装、镜像、容器、网络、Compose 等命令参考。
提示
Docker 安装、镜像管理、容器操作、数据卷、网络、Compose 等命令参考
Docker 安装
CentOS 安装
# 卸载老版本
sudo yum remove docker docker-common docker-selinux docker-engine
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker CE
sudo yum install docker-ce
# 启动
sudo systemctl start docker
# 验证
sudo docker run hello-worldUbuntu 安装
# 卸载老版本
sudo apt-get remove docker docker-engine docker.io
# 安装依赖
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
# 添加 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 安装仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce
# 验证
sudo docker run hello-worldmacOS / Windows
- macOS:前往 Docker Store 下载 Docker Desktop for Mac
- Windows:需要 Windows 10 Professional 或 Enterprise X64,下载 Docker Desktop for Windows
一键安装脚本
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh配置镜像加速器
国内访问 Docker Hub 速度不稳定,需要配置镜像加速器。
- 注册阿里云账号,在控制台获取加速器地址
- 配置 Docker daemon:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://your-mirror.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart dockerDocker 镜像命令
搜索镜像
docker search [OPTIONS] TERM
# 示例
docker search java
docker search -s 10 java # Star 不低于 10下载镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 示例
docker pull java
docker pull reg.itmuch.com/java:7列出镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]
# 示例
docker images
docker images java:8
docker images --filter "dangling=true" # 展示虚悬镜像删除镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
# 示例
docker rmi hello-world
docker rmi -f $(docker images) # 删除所有镜像保存与加载
# 保存镜像
docker save busybox > busybox.tar
# 加载镜像
docker load < busybox.tar.gz构建镜像
docker build [OPTIONS] PATH | URL | -
# 常用选项
# -f, --file 指定 Dockerfile 名称
# -t, --tag 设置标签 name:tag
# --no-cache 不使用缓存Docker 容器命令
新建并启动容器
docker run [OPTIONS] IMAGE [COMMAND]
# 常用选项
# -d 后台运行
# -p 宿主端口:容器端口 端口映射
# -P 随机端口映射
# --name 指定容器名称
# --network 指定网络模式
# 示例
docker run -d -p 91:80 nginx端口映射格式
| 格式 | 说明 |
|---|---|
ip:hostPort:containerPort | 映射到指定 IP 的指定端口 |
ip::containerPort | 映射到指定 IP 的随机端口 |
hostPort:containerPort | 映射到宿主机所有 IP 的指定端口 |
containerPort | 映射到宿主机所有 IP 的随机端口 |
列出容器
docker ps [OPTIONS]
# 常用选项
# -a 列出所有容器(包括已停止的)
# -q 静默模式,只显示容器 ID
# -n 5 显示最近创建的 5 个容器停止与重启
docker stop 容器ID/名称 # 停止容器
docker kill 容器ID/名称 # 强制停止
docker start 容器ID/名称 # 启动已停止的容器
docker restart 容器ID/名称 # 重启容器进入容器
# 方式一:docker exec(推荐)
docker exec -it 容器ID /bin/bash
# 方式二:docker attach(多窗口同步,不推荐)
docker attach 容器ID删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 示例
docker rm 784fd3b294d7 # 删除已停止的容器
docker rm -f 容器ID # 强制删除运行中的容器
docker rm -f $(docker ps -a -q) # 删除所有容器导出与导入
docker export 容器ID > container.tar # 导出容器
docker import container.tar image:tag # 导入容器为镜像Docker Hub 管理
注册与登录
docker login
# 输入用户名和密码推送镜像
docker push 用户名/仓库名:标签Docker Registry 私有仓库
搭建 Docker Registry
# 启动 Registry 2.0
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
# 修改镜像标签
docker tag itmuch/microservice-discovery-eureka:0.0.1 localhost:5000/itmuch/microservice-discovery-eureka:0.0.1
# 推送到私有仓库
docker push localhost:5000/itmuch/microservice-discovery-eureka:0.0.1Docker 可视化工具
Portainer
Portainer 是轻量级的 Docker 管理界面,支持 Docker 主机和 Swarm 集群管理。
# 启动 Portainer
docker run -d --privileged -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/portainer:/data \
portainer/portainerDocker 数据持久化
数据卷
# 创建数据卷
docker run --name nginx-data -v /mydir nginx
# 挂载宿主机目录
docker run --name nginx-data2 -v /host-dir:/container-dir nginx
# 只读挂载
docker run --name nginx-data3 -v /host-dir:/container-dir:ro nginx数据卷容器
# 创建数据卷容器
docker run --name nginx-volume -v /data nginx
# 其他容器挂载
docker run --name v1 --volumes-from nginx-volume nginx
docker run --name v2 --volumes-from nginx-volume nginxDocker 网络
默认网络
Docker 安装时自动创建三种网络:
| 网络 | 驱动 | 说明 |
|---|---|---|
| bridge | bridge | 默认网络,容器通过网桥通信 |
| host | host | 容器使用宿主机网络栈 |
| none | null | 无网络 |
自定义网络
# 创建桥接网络
docker network create --driver bridge isolated_nw
# 启动容器连接到自定义网络
docker run --network=isolated_nw -itd --name=container1 busybox
# 连接已有容器到网络
docker network connect isolated_nw container2
# 断开连接
docker network disconnect isolated_nw container2network 命令
| 命令 | 说明 |
|---|---|
docker network create | 创建网络 |
docker network inspect | 查看网络详情 |
docker network ls | 列出所有网络 |
docker network connect | 连接容器到网络 |
docker network disconnect | 断开容器与网络的连接 |
docker network rm | 删除网络 |
Docker Compose
简介
Docker Compose 用于定义和运行多容器 Docker 应用程序,适合开发、测试、CI 工作流等场景。
安装
# 下载安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加执行权限
chmod +x /usr/local/bin/docker-compose
# 验证
docker-compose --versiondocker-compose.yml 常用命令
| 命令 | 说明 |
|---|---|
build | 配置构建时选项 |
command | 覆盖容器启动后执行的命令 |
dns | 配置 DNS 服务器 |
environment | 环境变量设置 |
env_file | 从文件获取环境变量 |
expose | 暴露端口 |
image | 指定镜像名称 |
links | 连接到其他服务 |
ports | 端口映射 |
volumes | 卷挂载路径 |
networks | 网络配置 |
docker-compose 常用命令
| 命令 | 说明 |
|---|---|
docker-compose up | 创建并启动所有服务 |
docker-compose up -d | 后台启动 |
docker-compose down | 停止并删除所有容器 |
docker-compose ps | 列出所有容器 |
docker-compose build | 构建或重新构建服务 |
docker-compose start | 启动已存在的容器 |
docker-compose stop | 停止运行中的容器 |
docker-compose logs | 查看日志输出 |
docker-compose scale | 设置服务实例个数 |
Compose 网络
默认情况下,Compose 会为应用创建一个网络,服务的每个容器都会加入该网络。容器之间可使用服务名称作为 hostname 相互访问。
version: '2'
services:
web:
build: .
ports:
- "8000:8000"
networks:
- front
db:
image: postgres
networks:
- back
networks:
front:
driver: custom-driver-1
back:
driver: custom-driver-2WordPress 编排示例
version: '2'
services:
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
wordpress:
image: wordpress
ports:
- "80:80"
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=123456ELK 编排示例
version: '2'
services:
elasticsearch:
image: elasticsearch
ports:
- "9200:9200"
- "9300:9300"
logstash:
image: logstash
command: logstash -f /etc/logstash/conf.d/logstash.conf
volumes:
- ./config:/etc/logstash/conf.d
- /opt/build:/opt/build
ports:
- "5000:5000"
kibana:
image: kibana
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
ports:
- "5601:5601"控制服务启动顺序
使用 wait-for-it 脚本控制启动顺序:
version: '2'
services:
mysql:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=123456
wordpress:
image: wordpress
volumes:
- ./wait-for-it.sh:/wait-for-it.sh
environment:
- WORDPRESS_DB_HOST=mysql
- WORDPRESS_DB_USER=root
- WORDPRESS_DB_PASSWORD=123456
entrypoint: "sh /wait-for-it.sh mysql:3306 -- docker-entrypoint.sh"
command: ["apache2-foreground"]生产环境使用
# 使用多个 Compose 文件
docker-compose -f docker-compose.yml -f production.yml up -d
# 重新构建并更新单个服务
docker-compose build web
docker-compose up --no-deps -d web伸缩应用
docker-compose scale 服务名称=服务实例个数