Docker
约 1351 字大约 5 分钟
docker容器
2020-05-07
一句话摘要:Docker 安装、镜像管理、容器操作、常用软件部署的命令速查手册。
背景与动机
Docker 是目前最流行的容器化技术,掌握常用命令是开发和运维的基础技能。本文整理了 Docker 的常用命令,涵盖安装、镜像管理、容器操作以及常用软件部署,适合作为日常速查手册。
安装
yum 方式(CentOS/RHEL)
yum -y install dockerapt 方式(Ubuntu/Debian)
# 通过 https 使用仓库
sudo apt install apt-transport-https ca-certificates curl software-properties-common
# 添加 Docker 官方密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加仓库
vim /etc/apt/sources.list.d/docker.list
# 写入:deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable
# 更新并安装
sudo apt-get update
sudo apt install docker-ce
# 验证安装
docker --version服务管理
启动与停止
# 启动 Docker 服务
sudo systemctl start docker
# 查看服务状态
systemctl status docker.service
# 设置开机自启
systemctl enable docker卸载
# 查看已安装的 Docker 包
yum list installed | grep docker
# 卸载(示例)
sudo yum -y remove containerd.io.x86_64
# 清理数据目录
sudo rm -rf /var/lib/dockerDocker Machine
Docker Machine 是用于在多平台创建和管理 Docker 主机的工具。
# 查看版本
docker-machine version
# 查询已创建的主机
docker-machine ls
# 创建新主机
docker-machine create
# 环境配置
docker-machine env镜像管理
仓库操作
# 登录镜像仓库
docker login
# 退出登录
docker logout镜像操作
# 查看本地镜像
docker images
# 拉取镜像(指定标签)
docker pull ubuntu:13.10
# 搜索镜像
docker search httpd
# 删除镜像
docker rmi <镜像ID或名称>容器操作
容器生命周期
# 启动交互式容器
docker run -it ubuntu /bin/bash
# 启动已停止的容器
docker start <容器ID或名称>
# 启动后台容器
docker run -itd --name ubuntu-test ubuntu /bin/bash
# 进入运行中的容器
docker exec -it <容器ID> /bin/bash
# 停止容器
docker stop <容器ID>
# 重启容器
docker restart <容器ID>
# 强制删除容器
docker rm -f <容器ID>
# 查看所有容器(含已停止)
docker ps -a容器导入导出
# 导出容器为 tar 文件
docker export <容器ID> > ubuntu.tar
# 从 tar 文件导入为镜像
cat /docker/ubuntu.tar | docker import - test/ubuntu:v1Web 应用部署
以官方示例 Web 应用为例:
# 拉取示例应用
docker pull training/webapp
# 后台运行并映射端口
docker run -d -P training/webapp python app.py
# 查看端口映射
docker port <容器ID>
# 查看应用日志
docker logs -f <容器ID>
# 查看容器进程
docker top <容器ID>
# 查看容器详细信息
docker inspect <容器ID>常用参数说明
| 参数 | 说明 | 示例 |
|---|---|---|
-d | 后台运行 | docker run -d nginx |
-p | 端口映射 | -p 8080:80 |
-v | 目录挂载 | -v /host:/container |
--name | 指定容器名称 | --name my-nginx |
--restart=always | 自动重启 | 容器退出时自动重启 |
--privileged=true | 管理员权限 | 获取宿主机 root 权限 |
镜像源配置
国内网络环境下,配置镜像加速可显著提升拉取速度。
# 编辑配置文件
sudo vim /etc/docker/daemon.json写入以下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://3laho3y3.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://mirror.ccs.tencentyun.com"
]
}重载配置并重启:
sudo systemctl daemon-reload
sudo systemctl restart docker文件拷贝
在宿主机与容器间拷贝文件:
# 从容器拷贝到宿主机
docker cp <容器ID>:/容器路径 /宿主机路径
# 从宿主机拷贝到容器
docker cp /宿主机路径 <容器ID>:/容器路径常用软件部署
Tomcat
docker run --name tomcat -p 8080:8080 tomcat:latestSFTP
docker run --restart=always --name mysftp -p 2222:22 -d atmoz/sftp \
parallels:jc19940116:::upload \
-v /host/upload:/home/foo/uploadNginx
docker run --restart=always --privileged=true -d \
-p 80:80 -p 443:443 \
--name wings-nginx \
-v /home/static_blog/static_blog/:/home/static_blog/static_blog/ \
-v /home/program/nginx/ssl/:/etc/nginx/ssl/:rw \
-v /home/program/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /home/program/nginx/log:/var/log/nginx \
nginx:latestRedis
docker run --restart=always --privileged=true -d \
-p 6379:6379 \
--name wings-redis \
-v /Users/jinchen/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /Users/jinchen/docker/redis/data:/data \
redis:latestMySQL
MySQL 5.7 示例:
docker run --privileged=true --restart=always -d \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
--name wings-mysql \
-v /Users/jinchen/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /Users/jinchen/docker/mysql/db:/var/lib/mysql \
mysql:5.7MySQL 8.0 示例(含用户初始化):
docker run -d \
--name mysql-container \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=continew_admin \
-e MYSQL_USER=testuser \
-e MYSQL_PASSWORD=test123456 \
-p 3306:3306 \
mysql:8.0Zookeeper
docker run --restart=always --privileged=true -d \
--publish 2181:2181 \
--name wings-zookeeper \
zookeeper:latestOracle XE 11g
# 启动容器
docker run --privileged=true --restart=always -d \
-p 32770:22 -p 32768:8080 -p 1521:1521 \
--name wings-oracle11g \
oracleinanutshell/oracle-xe-11g:latest
# 进入容器
docker exec -it wings-oracle11g /bin/bash
# 安装 vim(容器内执行)
apt-get update && apt-get install vim创建新实例
# 进入实例目录
cd $ORACLE_HOME/dbs
export ORACLE_SID=H3BPM创建参数文件 initH3BPM.ora:
mkdir -p $ORACLE_BASE/admin/H3BPM/{a,b,c,u}dump参数文件内容:
audit_file_dest='/u01/app/oracle/admin/H3BPM/adump'
background_dump_dest='/u01/app/oracle/admin/H3BPM/bdump'
compatible='11.2.0.0.0'
core_dump_dest='/u01/app/oracle/admin/H3BPM/cdump'
db_name='H3BPM'
sga_target=600M
user_dump_dest='/u01/app/oracle/admin/H3BPM/udump'用户管理
# 切换到 oracle 用户
su oracle
# 进入 SQL*Plus
sqlplus /nolog
conn /as sysdba
# 修改系统用户密码
alter user system identified by system;
alter user sys identified by system;
# 创建新用户
create user h3bpm identified by h3bpm;
grant connect,resource to h3bpm;
# 设置密码永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
# 关闭/启动数据库
shutdown immediate;
startup;
# 查看实例信息
show parameter name;总结
- Docker 命令遵循
docker <对象> <动作>的统一格式 - 使用
-v挂载配置和数据目录,实现数据持久化 - 生产环境建议配置
--restart=always确保服务自动恢复 - 国内环境配置镜像加速可大幅提升拉取速度
- 复杂部署建议使用 Docker Compose 管理多容器应用
