安装与配置

安装

Centos

安装命令如下:

  1. curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

  1. curl -sSL https://get.daocloud.io/docker | sh

实在不行就用人肉安装

  1. 卸载旧版本

    1. yum remove -y docker \
    2. docker-client \
    3. docker-client-latest \
    4. docker-common \
    5. docker-latest \
    6. docker-latest-logrotate \
    7. docker-logrotate \
    8. docker-engine
  2. 安装准备:

    1. yum install -y yum-utils \
    2. device-mapper-persistent-data \
    3. lvm2
  3. 添加源 ```shell yum-config-manager \ —add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  1. 4. 安装Docker-ce
  2. ```shell
  3. yum update -y && yum install -y docker-ce
  4. systemctl start docker.service

启动Docker

方法1

  1. $ sudo systemctl enable docker
  2. $ sudo systemctl start docker

方法2

  1. service docker start

docker配置

  1. 修改配置文件: /etc/docker/daemon.json(如果没有daemon.json文件,需要自己新建一下)
  2. 修改完成后,重载配置文件:systemctl daemon-reload
  3. 重启docker: sudo systemctl restart docker
  4. 查看docker状态: systemctl status docker (查看docker状态的步骤非必需,但建议养成这个好习惯。)

镜像源管理

可以通过此配置,设置国内镜像源,实现提速的效果。

  1. {
  2. "registry-mirrors": ["https://md4nbj2f.mirror.aliyuncs.com"]
  3. }

安全地址配置

如果是自己搭建的docker镜像仓库,可能并没有配置https,则需要在此增加配置。

  1. {
  2. "insecure-registries" : [
  3. "docker-registry.chenhao.com"
  4. ]
  5. }

日志最大存储限制

如果不配置它,可能会导致/var/lib/docker/tmp/containers目录中的容器日志过大,挤占系统盘空间。

  1. {
  2. "log-driver": "json-file",
  3. "log-opts": {
  4. "max-size": "10m",
  5. "max-file": "10"
  6. }
  7. }

登录镜像仓库

  1. sudo docker login --username=<name> --password=<password> <storageUrl>

容器与宿主环境的文件互传

拷贝容器内文件

  1. docker cp <容器名称>:<容器内的文件路径> <主机上的目标路径>

例如:docker cp nginx:/etc/nginx /data/docker/nginx

拷贝宿主环境的文件到容器中

  1. docker cp <主机上的目标路径> <容器名称>:<容器内的文件路径>

例如:docker cp /data/docker/nginx nginx:/etc/nginx

使用Dockerfile创建镜像

  1. docker build -t <imageName>:<tagName> .

在宿主机执行docker容器中的shell脚本或命令

  1. docker exec -it <容器名称> /bin/bash -c 'echo $PATH'

docker清理

删除所有未被容器使用的镜像:

  1. $ docker image prune -a

删除所有停止运行的容器:

  1. $ docker container prune

删除所有未被挂载的卷:

  1. $ docker volume prune

删除所有网络:

  1. $ docker network prune

删除 docker 所有资源

  1. $ docker system prune

进入已经停止的容器内部

通过如下命令查看需要进入进程的容器 ID

  1. 查看所有容器进程: docker ps -a
  2. 记住容器的id或者name,用于后续启动异常的容器保存为镜像
  3. 启动异常的容器保存为镜像: docker commit <name or containerId> <newName>
  4. 进入新容器: docker run -it <newName> /bin/bash

查看日志

Help

  1. $ docker logs [OPTIONS] CONTAINER
  2. Options:
  3. --details 显示更多的信息
  4. -f, --follow 跟踪实时日志
  5. --since string 显示自某个timestamp之后的日志,或相对时间,如40m(即40分钟)
  6. --tail string 从日志末尾显示多少行日志, 默认是all
  7. -t, --timestamps 显示时间戳
  8. --until string 显示自某个timestamp之前的日志,或相对时间,如40m(即40分钟)

案例

  • 查看最近30分钟的日志: $ docker logs --since 30m CONTAINER_ID
  • 查看某时间之后的日志: $ docker logs -t --since="2019-11-02T13:23:37" CONTAINER_ID
  • 查看某时间段日志: $ docker logs -t --since="2019-11-02T13:23:37" --until "2019-11-03T12:23:37" CONTAINER_ID

docker-compose

基本使用

  • 保证项目根目录下有docker-compose.yml文件
  • 运行docker-compose up启动
    • 建议使用docker-compose up -d关闭后可以自动删除。
  • 运行docker-compose down关闭

命令选项

  • -f, --file FILE指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
  • -p, --project-name NAME指定项目名称,默认将使用所在目录名称作为项目名。
  • --x-networking使用 Docker 的可拔插网络后端特性
  • --x-network-driver DRIVER指定网络后端的驱动,默认为 bridge
  • --verbose输出更多调试信息。
  • -v, --version打印版本并退出。

批量操作

  • 启动所有容器:docker start $(docker ps -a -q)
  • 关闭所有容器:docker stop ``$(docker ps -a -q)
  • 删除所有容器:docker rm ``$(docker ps -a -q)
  • 删除所有镜像(慎用):docker rmi $(docker images | awk '{print $3}' |tail -n +2)

ps:可以用docker ps -a | awk '{ print $1}' | tail -n +2代替docker ps -a -q

常用服务部署

nginx

  1. 运行临时容器:docker run -d --name nginx nginx
  2. 拷贝出配置文件到宿主机(做持久化):docker cp nginx:/etc/nginx /data/docker/nginx
  3. 停止临时容器:docker stop nginx && docker rm nginx
  4. 运行最终使用的容器:docker run -d --name nginx --net=host -v /data/docker/nginx:/etc/nginx nginx

gitlab runner

  1. 运行runner

    1. sudo docker run -d --net=host --name gitlab-runner --restart always \
    2. -v /data/docker/gitlab-runner/config:/etc/gitlab-runner \
    3. -v /var/run/docker.sock:/var/run/docker.sock \
    4. -v /etc/localtime:/etc/localtime \
    5. gitlab/gitlab-runner:latest
  2. 注册runner

    1. docker run --rm -it -v /data/docker/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register