Skip to content

Docker入门指南

Docker安装及配置

安装

通过脚本安装,由于CentOS已经不再维护,需要手动安装

bash
curl -sSL https://get.docker.com/ | sh
bash
yum-config-manager --add-repo https://cdn.httpsok.com/speedup/linux/tlinux-docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
bash
yum-config-manager --add-repo https://cdn.httpsok.com/speedup/linux/aliyun-docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
bash
dnf check-update
dnf config-manager --add-repo https://cdn.httpsok.com/speedup/linux/tlinux-docker-ce.repo -y
dnf install -y docker-ce docker-ce-cli containerd.io
bash
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-config-manager --add-repo https://cdn.httpsok.com/speedup/linux/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
bash
dnf check-update
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -y
dnf install -y docker-ce docker-ce-cli containerd.io

常用配置

修改配置文件

bash
mkdir -p /etc/docker/ && vim /etc/docker/daemon.json
json
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
  ],
  "bip":"192.168.0.1/24",
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}
json
{
  "registry-mirrors": [
    "https://kjeon24c.mirror.aliyuncs.com"
  ],
  "bip":"192.168.0.1/24",
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}
json
{
  "bip":"192.168.0.1/24",
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}

启动

bash
systemctl start docker
bash
systemctl enable docker.service

Docker-compse

安装

docker-composedocker是一对好伙伴,一般用docker-compse方便管理镜像和容器,因为手动敲docker命令实在记不住也容易出错。

https://docs.docker.com/compose/install/#install-compose-on-linux-systems

bash
curl -L "https://github.com/docker/compose/releases/download/v2.29.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
bash
curl -L "https://cdn.httpsok.com/speedup/linux/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

建立软链接:

bash
chmod +x /usr/local/bin/docker-compose && ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

实战经验

启动容器

bash
# 启动容器
docker run --name db-demo -p 13306:3306 -v $PWD/db/data:/var/lib/db -e MYSQL_ROOT_PASSWORD="123456" -d db:5.8

# 运行容器
docker run --name centos7 -p 8080:80 -v $PWD/soft:/root/soft -d -it centos:centos7

# 进入容器
docker exec -it centos7 bash

# 删除容器
docker rm centos7

# 查看资源实际消耗
docker stats  --no-stream

进入容器

bash
# 进入容器
docker exec -it 72f45548ee75 sh

镜像导入导出

bash

# 镜像导出
docker save -o busybox.tar busybox
#docker save -o busybox.tar db8ee88ad75f  # 如果用镜像ID的方式,导入时会没有镜像名称

# 镜像导入
docker load < busybox.tar 
#docker load --input ./ubuntu18.tar

容器导入导出

bash
# 导出容器
docker export <容器> > <保存路>
docker export ubuntu18 > ./ubuntu18.tar

# 导入容器
docker import <文件路>  <容器>
docker import ./ubuntu18.tar ubuntu18

发布镜像到仓库(hub.docker.com)

bash
# 登录hub.docker.com
docker login

# 给镜像打标签
docker tag <image> username/repository:tag

# 发布镜像
docker push username/repository:tag

常用命令

命令描述
docker ps查看运行的所有容器
docker rm <容器ID>删除容器
docker exec it <容器ID> sh进入容器
docker cp <容器ID>:<容器内目录> 宿主机目录从容器中拷贝文件到宿主机
docker images查看本地镜像列表
docker search <镜像名[:版本号]>搜索镜像
docker rmi <镜像ID>删除镜像
docker pull <镜像名>拉取镜像
docker run 拉取镜像,创建容器,运行容器
docker history <镜像ID>查看镜像的历史记录

如何获取镜像

会翻墙的小伙伴hub.docker.com,不会翻墙的小伙伴aliyun.com,当然也用命令行的方式。

磁盘空间不足

默认docker镜像存放目录在/var/lib/docker/,由于是系统默认磁盘,通常容量不是很大。一段时间后,会因为磁盘空间占满,导致docker无法正常使用。

bash
# 停止服务
systemctl stop docker

# 在大容量目录下,新建docker目录
mkdir -p /data/docker/lib

# 复制原有内容
rsync -avz /var/lib/docker /data/docker/lib/

# 编辑daemon.josn文件
/etc/docker/daemon.json
{
  "graph": "/data/docker/lib/docker"
}

# 重载服务
systemctl daemon-reload

# 重启服务
systemctl start docker

# 验证docker是否正常(命令可能执行失败,有些容器可能起不来,这时候,需要在docker旧目录中,找到一个docker的日志文件,将其删除即可)
docker info
docker ps

# 删除旧目录
rm -rf /var/lib/docker

限制日志大小

方式一

bash
vim /etc/docker/daemon.json
json
{
  "registry-mirrors": [
    "https://kjeon24c.mirror.aliyuncs.com"
  ],
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"}
}

方式二

yaml
nginx:
  image: nginx:1.12.1
  restart: always
  logging:
    driver: "json-file"
    options:
      max-size: "5g"

方式三

bash
docker run -d --log-opt max-size=1g nginx

清除日志脚本

bash
#!/bin/sh
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"

参考文档

人生感悟