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,可以通过以下思路来实现:

  1. 创建数据存储
docker volume create --name redis-vol -o type=none -o device=/data/dbs/redis -o o=bind
  1. 创建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