Docker 使用

目录
Docker 前几年为了配置数据库接触过一次,仅限于 run
& start
之类。
今天详细看看官方文档,记录一下。
安装1
我使用的系统是 CentOS,内核版本 3.10.0-957.el7.x86_64
:
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装存储库及依赖包
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安装最新版 Docker
yum install docker-ce docker-ce-cli containerd.io
检查版本
docker --version
启动
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
:
## docker run -it debian:stable /bin/bash
root@xxxx:/#
退出重新连接容器:
## 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:
## 拉取最新镜像
docker pull mariadb
## 拉取指定版本镜像
docker pull mariadb:x.x.x
数据库保存到本地,文件结构如下:
- test
- docker-compose.yml
- mysql
## 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
文件夹下编译容器:
docker-compose -f docker-compose.yml up
数据库导入:
## 从其他数据库导出全部数据
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