Docker 环境搭建与使用实例
前言
面试造火箭, 需要使用 WSL2, 提供基础搭建与一个 redis 实践, 包括常见的:
- 系统配置
- 目录映射与持久化
- 网络设置与多网络联通
搭建步骤
1 2 3
| wsl -u root # 使用 root 用户 curl https://get.docker.com | sh sudo service docker start
|
常见使用
拉取镜像
1 2
| docker pull redis:7.2.4 docker inspect redis:7.2.4
|
启动容器
指令 run 指令 network Docker 镜像
- 创建目录
~\redis\conf
并下载 redis.conf 文件, 设置持久化规则 - 创建内部网络 reds
- 后台运行
- 命名为 redis1/redis2
- 内存限制为 2GB
- 使用 4 个 cpu
- 加入 reds 网络
- 将内部的 6379 绑定到主机的 6377/6378 端口
- 映射主机目录
~/redis/data/redis1
, ~/redis/data/redis2
到 容器的 /data
- 映射主机目录
~/redis/conf
到 容器的 ~/conf
- 自动重启, 除非手动关闭, 见
- 使用
/conf/redis.conf
文件作为配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| mkdir -p ~/redis/conf && cd ~/redis/conf wget https://raw.githubusercontent.com/redis/redis/unstable/redis.conf && echo "save 60 1" >> redis.conf docker network create reds
docker run -d --name redis1 \ -m 2GB --cpus 4 \ --network reds \ -p 6377:6379 \ -v ~/redis/data/redis1:/data \ -v ~/redis/conf:/conf \ --restart unless-stopped \ redis:7.2.4 \ redis-server /conf/redis.conf
docker run -d --name redis2 \ -m 2GB --cpus 4 \ --network reds \ -p 6378:6379 \ -v ~/redis/data/redis2:/data \ -v ~/redis/conf:/conf \ --restart unless-stopped \ redis:7.2.4 \ redis-server /conf/redis.conf
docker network inspect reds
|
查看网络联通
1 2 3 4
| docker exec -it redis1 bash ping -c 2 redis2 docker exec -it redis2 bash ping -c 2 redis1
|
测试读写
1 2 3 4 5 6
| docker exec -it redis1 bash redis-cli set game gtav get game exit cd ~/redis/data/redis1 && ls -sh
|
已有实例加入另一个网络
1 2 3 4 5 6 7 8
| docker network create app docker run --name app1 --network app -d redis:7.2.4 docker network connect app redis1 docker network inspect app docker exec -it app1 bash ping -c 2 redis1 ping -c 2 redis2 exit
|
移除容器与网络
1 2 3 4 5 6 7 8 9 10
| docker network disconnect app app1 docker network disconnect app redis1 docker network disconnect reds redis1 docker network disconnect reds redis2 docker stop redis1 redis2 app1 docker ps -a docker rm redis1 redis2 app1 docker network rm app docker network rm reds docker network ls
|
额外
加速 Docker
使用镜像
参考 gist
创建或修改 /etc/docker/daemon.json
使用以下内容:1 2 3 4 5 6 7
| { "registry-mirrors": [ "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn" ] }
|
sudo systemctl daemon-reload
sudo systemctl restart docker
为容器配置代理
修改 ~/.docker/config.json
, 另参见文章 “WSL2 环境搭建 Ubuntu” 中 “与宿主机之间通讯” 一节1 2 3 4 5 6 7 8 9
| { "proxies": { "default": { "httpProxy": "http://192.168.240.1:7890", "httpsProxy": "http://192.168.240.1:7890", "noProxy": "*.test.example.com,.example.org,127.0.0.0/8" } } }
|
使用 root 用户 进入容器
1
| docker exec -it -u 0 redis1 bash
|
自动重启 Docker Engine
sudo systemctl enable /usr/lib/systemd/system/docker.service
使用 dive 分析镜像
1 2
| sudo snap install dive dive redis:7.2.4
|
ping 命令不存在
1 2 3 4 5
| cd /bin && find -name ping apt-get update -y \ && apt-get upgrade -y \ && apt-get install iputils-ping -y \ && apt-get install net-tools -y
|