Docker相关环境全套安装文档兼小技能

以下环境皆为ubuntu16.04,主要安装docker,docker-compose,docker仓库等。

Docker安装

参考官方

A: 有源安装

Ubuntu的 Docker 安装:

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

CentOS的 Docker 安装:

yum remove docker \
             docker-client \
             docker-client-latest \
             docker-common \
             docker-latest \
             docker-latest-logrotate \
             docker-logrotate \
             docker-selinux \
             docker-engine-selinux \
             docker-engine
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce
systemctl start docker
systemctl enable docker

docker version

B: 无源安装

Ubuntu:

先下载已编译包

wget https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_18.06.1~ce~3-0~ubuntu_amd64.deb
sudo dpkg -i docker-ce_18.06.1~ce~3-0~ubuntu_amd64.deb
sudo docker run helloworld

在2017年的3月1号之后,Docker的版本命名开始发生变化,同时将CE版本和EE版本进行分开, 18.03表示18年3月发布。

离线安装命名前docker(docker-engine depends on libltdl7 (>= 2.4.6);):

wget https://apt.dockerproject.org/repo/pool/main/d/docker-engine/docker-engine_1.12.1-0~xenial_amd64.deb
wget http://archive.ubuntu.com/ubuntu/pool/main/libt/libtool/libltdl7_2.4.6-4_amd64.deb
dpkg -i *.deb

Docker-compose安装

我们可以使用docker-compose来对多个容器进行管理。

离线安装:

wget https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m`
 
mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Docker Hub安装

VMware公司开源的企业级的Docker Registry管理项目:harbor

有了仓库,我们可以直接push镜像上去,然后从其他地方拉,不用借助U盘。

安装参考:

官方文章

环境依赖较新的docker1.10+docker-compose1.60+python2.7,我们选择离线安装方式:

wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.0-rc3.tgz
tar xvf harbor-offline-installer-v1.6.0-rc3.tgz
cd harbor

编辑docker-compose.yml

  proxy:
    image: goharbor/nginx-photon:v1.6.0
    container_name: nginx
    restart: always
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    ports:
      - 8888:80
      - 1443:443
      - 4443:4443

修改common/templates/registry/config.yml文件加入8888端口:

vim common/templates/registry/config.yml

auth:
  token:
    issuer: harbor-token-issuer
    realm: $public_url:8888/service/token
    rootcertbundle: /etc/registry/root.crt
    service: harbor-registry

编辑harbor.cfg

hostname = 192.168.152.12
harbor_admin_password = admin

启动并登陆:

sudo su
ufw allow 8888
./prepare
docker-compose up -d
打开:http://192.168.152.12:8888,账号 密码:admin

Docker配置

你可以配置某些仓库地址(第一个是阿里云加速仓库地址,第二个忽略https安全)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ztndgg1k.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.0.88:8888"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

然后登录推送:

sudo docker login http://192.168.0.88:8888
sudo docker tag mysql:5.7 192.168.0.88:8888/public/mysql:5.7
docker push  192.168.0.88:8888/public/mysql:5.7

Docker特定场景使用

离线镜像

如果不能访问外网,那么可以用save和load来保存和加载镜像

docker save xxx:1.0 > /root/api1.0.tar
docker  load < /root/api1.0.tar
docker images

注意事项

开发和使用docker久了后,有些体会:

  1. ENTRYPOINT,表示镜像在初始化时需要执行的命令,不可被重写覆盖,CMD参数可以接在其后面,所以那些可以变化的参数都写在CMD.
  2. CMD,表示镜像运行默认参数,可被重写覆盖, docker run是如果后面有参数,呵呵.
  3. ENTRYPOINT/CMD都只能在文件中存在一次,并且最后一个生效, 多个存在,只有最后一个生效,其它无效!CMD 可以补充,见 1
  4. 需要初始化运行多个命令,彼此之间可以使用 && 隔开,但最后一个须要为无限运行的命令,不然容器运行后就退出了