Docker 札记
奇技淫巧
境内快速安装docker环境
# curl -sSfL get.docker.io -o get_docker.sh
# bash get_docker.sh --mirror Aliyun
官方的安装脚本中,只支持两个加速镜像:
- AzureChinaCloud
- Aliyun
另一种方式:
yum install -y yum-utils device-mapper-persistent-data lvm2 bash-completion
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache all
yum -y install docker-ce
docker卷使用案例
比如数据目录挂载目录为/data
,将redis的数据目录挂载至/data/dbs/redis
,可以通过以下思路来实现:
- 创建数据存储
docker volume create --name redis-vol -o type=none -o device=/data/dbs/redis -o o=bind
- 创建docker-compose
version: '2.3'
services:
redis:
image: redis:latest
container_name: redis-server
restart: always
networks:
- redis
volumes:
- redis-vol:/data
ports:
- "6379:6379"
command: redis-server --appendonly yes --requirepass "H3yuncom"
volumes:
redis-vol:
external: true
networks:
redis:
external:
name: redis-net
# docker network create --driver=bridge --subnet 10.88.1.0/25 --gateway 10.88.1.1 --opt "com.docker.network.bridge.name"="br0" redis-net
使用自定义网桥
创建网桥
yum -y install bridge-utils # RHEL
apt-get install bridge-utils # Debian
删除docker0网桥
ip link set docker0 down
brctl delbr docker0
iptables -t nat -F POSTROUTING
网桥配置
{
"bridge": "br0",
"bip": "192.168.1.5/24",
"fixed-cidr": "192.168.1.5/25",
"mtu": 1500,
"default-gateway": "10.20.1.1"
}
导入/导出
使用save 导出
docker save -o ss.tar registry.cn-shenzhen.aliyuncs.com/shuhui/ss:1.0
使用 export 导出
docker export -o mysql-`date +%Y%m%d`.tar 运行容器ID
正在运行中的容器
使用load导入
docker load -i ss.tar
或者使用管道
docker load < ss.tar
使用import
docker import nginx-test.tar nginx:latest
或
cat nginx-test.tar | docker import - nginx:latest
不包含URL等信息
建议
可以依据具体使用场景来选择命令
- 若是只想备份images,使用save、load即可
- 若是在启动容器后,容器内容有变化,需要备份,则使用export、import
网络
全局指定DNS
docker守护进程的--dns 参数默认为8.8.8.8、8.8.4.4
- /etc/docker/daemon.json
{
"dns" : [
"114.114.114.114",
"114.114.115.115"
]
}
指定某个容器Host
- docker run 参数声明:
docker run -d --name test1 \
--add-host test1.a:1.2.3.4 \
local/test
- docker-compose 配置声明:
test2:
build: local/test
extra_hosts:
test1.a: 1.2.3.4
test1.b: 4.3.2.1
常见错误
/tmp目录无exec 权限导致docker-compose 库不能正常加载
$ docker-compose ps
docker-compose: error while loading shared libraries: libz.so.1: failed to map segment from shared object: Operation not permitted
解决:
sudo mount /tmp -o remount,exec