CentOS安装

该 centos-extras 库必须启用。默认情况下,此仓库是启用的,但是如果已禁用它,则需要重新启用它
建议使用 overlay2 存储驱动程序。

卸载旧版本

较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

  1. sudo yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-engine

安装 Docker Engine-Community

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

  1. sudo yum install -y yum-utils \
  2. device-mapper-persistent-data \
  3. lvm2

设置稳定的仓库。

  1. sudo yum-config-manager \
  2. --add-repo \
  3. https://download.docker.com/linux/centos/docker-ce.repo

安装最新版本的 Docker Engine-Community 和 containerd

  1. sudo yum install docker-ce docker-ce-cli containerd.io

启动Docker

  1. sudo systemctl start docker

检查安装成功

  1. docker run hello-world

安装特定版本

列出并排序版本

  1. yum list docker-ce --showduplicates | sort -r
  2. docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
  3. docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
  4. docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
  5. docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable

安装指定版本

  1. sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

镜像加速

Ubuntu16.04+、Debian8+、CentOS7

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

  1. {"registry-mirrors":["https://registry.docker-cn.com"]}

重启服务

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart docker

检测加速生效

  1. docker info
  2. Registry Mirrors:
  3. https://registry.docker-cn.com/

命令

镜像相关

  1. docker pull postgres:12
  2. docker image ls
  3. docker run --name foo-postgres -e POSTGRES_PASSWORD=foo -p 54322:5432 -d postgres:12
  4. docker run --name foo-postgres -e POSTGRES_PASSWORD=foo -p 54322:5432 -d postgres:12
  5. docker search nginx
  6. #通过Dockerfile构建镜像 推荐使用
  7. docker build -t foo/component:v2 .
  8. #提交镜像 不推荐使用
  9. docker commit -m="add component" -a="alice" ${container_id} foo/nginx:v2

容器相关

  1. docker stop ${container_name}/${container_id}
  2. docker start #启动已停止的容器
  3. docker restart
  4. docker logs #查看标准输出
  5. docker attach #进入容器
  6. docker exec #进入容器(推荐使用因为退出不会使容器停止)
  7. docker exec 95 java -version
  8. docker rm -f
  9. #导入导出容器快照
  10. docker export ${container_name}/${container_id} > centos.tar
  11. cat opt/centos.tar | docker import - foo/centos:v1
  12. docker import http://foo.com/bar.tgz foo/imagerepo

数据卷

  1. docker volume create
  2. docker volume inspect #显示数据卷详情
  3. docker volume ls
  4. docker volume prune #删除所有未使用
  5. docker volume rm
  1. docker run -v /data foo_container
  2. docker run -v vol:/data foo_container
  3. docker run -v /var/data:/data foo_container

必须绝对路径,没有则创建空目录,如果镜像之前有内容,则隐藏内容,与宿主机保持一致。

docker stack

  1. docker swarm init
  2. docker stack deploy -c stack.yml postgres
  3. docker stack ls
  4. docker stack rm postgres
  5. docker service ls
  6. docker stack ps flink #查看容器状态,排查问题

stack.yml配置端口映射失败容器也会启动。

docker-compose

启动关闭

  1. docker-compose up -d
  2. docker-compose stop
  1. docker exec -it [${CONTAINER ID}][${NAMES}] /bin/bash

Dockerfile编写

  1. FROM debian:jessie
  2. ADD
  3. RUN apt-get update;
  4. RUN mkdir /opt/component
  5. ENV HOME=/opt/component
  6. ENV PATH=${HOME}/bin:${PATH}
  7. VOLUME /var/log
  8. EXPOSE 80
  9. CMD

概念

registry > repository > image
镜像(Image)相当于一个root文件系统,Debian镜像就包含完整的最小root文件系统。

容器状态

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

使用docker ps 能看到当前状态。

容器编排

Docker Stack

stack.yml编写

  1. version: '3.1'
  2. services:
  3. image: nginx
  4. volumes:
  5. - ./mysite.template:/etc/nginx/conf.d/mysite.template
  6. ports:
  7. - "8080:80"
  8. environment:
  9. - NGINX_HOST=luning.wang
  10. - NGINX_PORT=80
  11. command: /bin/bash -c "envsubst < /etc/nginx/conf.d/mysite.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
  12. ghost:
  13. image: ghost:3
  14. restart: always
  15. ports:
  16. - 80:2368
  17. environment:
  18. # see https://docs.ghost.org/docs/config#section-running-ghost-with-config-env-variables
  19. database__client: mysql
  20. database__connection__host: db
  21. database__connection__user: root
  22. database__connection__password: foo_password
  23. database__connection__database: ghost
  24. db:
  25. image: mysql:5.7
  26. restart: always
  27. environment:
  28. MYSQL_ROOT_PASSWORD: foo_password
  29. foo:
  30. links:
  31. - "jobmanager:jobmanager"

depend_on

自动创建网络,不需要links选项,depend_on其实是标记启动顺序。被依赖的容器RUNNING状态后在启动此容器。

deploy

1.endpoint_mode
2.labels
3.mode

  • global:每个集节点只有一个容器
  • replicated:指定容器数量(默认)

4.placement
5.replicas 容器运行数量
6. resources 支援限制

  1. deploy:
  2. resources:
  3. limits:
  4. cpus: '0.50'
  5. memory: 50M
  6. reservations:
  7. cpus: '0.25'
  8. memory: 20M
  1. restart_policy
    8. update_config

k8s

Kubernetes

参考资料

https://yeasy.gitbooks.io/docker_practice/

https://nickjanetakis.com/blog/benchmarking-debian-vs-alpine-as-a-base-docker-image