Docker 使用

本文最后更新于:2021年2月23日 下午

Docker 前几年为了配置数据库接触过一次,仅限于 run & start 之类。
今天详细看看官方文档,记录一下。

安装1

我使用的系统是 CentOS,内核版本 3.10.0-957.el7.x86_64

  1. 卸载旧版本

     yum remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
    
  2. 安装存储库及依赖包

     yum install -y yum-utils \
                    device-mapper-persistent-data \
                    lvm2
     yum-config-manager \
                    --add-repo \
                    https://download.docker.com/linux/centos/docker-ce.repo
    
  3. 安装最新版 Docker

     yum install docker-ce docker-ce-cli containerd.io
    
  4. 检查版本

     docker --version
    
  5. 启动

     systemctl start docker
     docker info
    

常用

列出镜像容器等

docker image ls
docker container ls -a
docker volume ls

这些信息也可以查看 /var/lib/docker 文件夹

删除

docker container rm [CONTAINER ID]

这类指令规律都是相似的

这里我遇到一个问题,ls 显示镜像,但是无法 rm,会提示 Error: No such image
好像是之前残留的问题,如果没有重要的文件可以如下解决:

systemctl stop docker
rm -rf /var/lib/docker
systemctl start docker

排错

有时需要查看 log 方便排错2

docker logs [OPTIONS] CONTAINER

OPTIONS

  • -f:跟踪日志输出
  • --since:显示某个开始时间的所有日志
  • -t:显示时间戳
  • --tail:仅列出最新 N 条容器日志

bash

启动新系统容器并连接到当前 bash

1
2
# docker run -it debian:stable /bin/bash
root@xxxx:/#

退出重新连接容器:

1
2
# docker exec -it xxxx /bin/bash
root@xxxx:/#

构建3

Dockerfile

官网有完整的例子,使用 Dockerfile 构建一个自己的镜像,一般注意如下:

  • 尽量使用别人已经构建好的镜像4
  • 尽量减少层(layer),我如果理解没错,官方例子是七层

将容器中位置绑定到当前目录5

docker run -p 4000:80 --mount type=bind,source="$(pwd)",target=/home/logs/ hello:v1

关于存储可查看 Manage data in Docker

  • Volumes:存储在 /var/lib/docker/volumes/
  • Bind mounts:可绑定本机
  • tmpfs mounts:仅存储在内存中

docker-compose.yml

启动服务感觉比 run 更高级一层,可以执行更复杂的配置,比如定义 CPU 占用率等

应用

mysql

使用 docker 本地配置一个 mysql 数据库6

1
2
3
4
# 拉取最新镜像
docker pull mariadb
# 拉取指定版本镜像
docker pull mariadb:x.x.x

数据库保存到本地,文件结构如下:

  • test
    • docker-compose.yml
    • mysql
1
2
3
4
5
6
7
8
9
10
11
12
# docker-compose.yml
version: '2'
services:
mysql:
image: mariadb:x.x.x
container_name: db-test
volumes:
- ./mysql:/var/lib/mysql # 容器中数据保存在本地指定文件夹下
environment:
- MYSQL_ROOT_PASSWORD=111111 # 配置数据库密码
ports:
- "3306:3306" # 将容器端口引出,前者表示本机端口

test 文件夹下编译容器:

1
docker-compose -f docker-compose.yml up

数据库导入:

1
2
3
4
5
6
7
# 从其他数据库导出全部数据
mysqldump -uroot -p --databases xxx > /xxx/xxx/backup.sql
# 把文件考入到 docker 中
docker cp /xxx/xxx/backup.sql db-test:/backup.sql
# 进入 docker 导入数据
docker exec -it db-test bash
mysql -uroot -p < backup.sql

Docker 使用
https://wishlily.github.io/article/tools/2019/08/14/docker-apply/
作者
Wishlily
发布于
2019年8月14日
许可协议