docker 安装

官方安装脚本

1
curl -fsSL get.docker.com | bash

阿里云安装(centos)

1
2
3
4
5
6
7
8
9
10
11
12
13
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo systemctl start docker.service

docker-compose 安装

1
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose && sudo chmod +x /usr/bin/docker-compose

免 root 执行 docker 命令

1
sudo usermod -aG docker $USER

顺便确定一下 sock 文件有没有权限(默认是有的), 退出账户重新登录一下即可生效

阿里云 Docker 加速

1
2
3
4
5
6
7
8
mkdir -p /etc/docker && tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF

或者

1
2
3
4
5
6
7
8
cat > /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF

常用操作

一次性删除所有的容器

1
docker rm -f `docker ps -aq`

一次性删除所有的镜像

1
docker rmi $(docker image ls | awk 'NR!=1 {print $1 ":" $2}')

一次性删除未打标签的镜像

1
docker image ls | grep none | awk '{print $3}' | xargs docker rmi

一次性删除所有 volume

1
docker volume rm `docker volume ls -q`

Docker 进入容器

1
2
docker run --name test_ubuntu -it ubuntu /bin/bash
启动一个容器并打开shell

查看容器详情

1
2
3
4
5
# 重看容器详情
docker inspect 容器id或名字

# 重看docker详情
docker info

启动容器

1
docker run -it 镜像名字 /bin/sh

进入一个运行中的容器

1
docker exec -it 容器id /bin/sh

打 tag

1
docker tag 镜像id oldboy1103/alpine:latest

查看容器占用磁盘空间

1
docker ps -a --format "table {{.Size}}\t{{.Names}}" | sort -hr

查看容器 id

1
docker inspect nginx --format "{{.ID}}"

查看日志文件

1
2
3
4
5
# 查看nginx容器的日志位置
docker inspect nginx --format "{{.LogPath}}"

# 查看所有容器的日志位置
docker inspect --format='{{.LogPath}}' `docker ps -a -q`
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 获取镜像,ID,端口号,状态
docker ps -a --format "table {{.Image}}\t{{.ID}}\t{{.Ports}}\t{{.Status}}" | sort -hr

# 根据状态列出容器
docker ps -a -f "status=running"
docker ps -a -f "status=exited"

# 获取容器的IP
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)

# 获取容器的mac地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)

# 获取容器name
docker inspect --format='{{.Name}}' $(docker ps -aq)
docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2

# 获取容器的Hostname
docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)

# 获取hostname,ip
docker inspect --format 'Hostname:{{ .Config.Hostname }} Name:{{.Name}} IP:{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)

# 获取容器的镜像
docker inspect --format='{{.Config.Image}}' `docker ps -a -q`

容器备份还原

镜像的备份还原

  1. commit 将容器保存成镜像

    1
    docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
  2. 将镜像导出成 tar (镜像是分层的,可以回滚,)

    1
    docker save -o ./backup.tar gitlab/gitlab-ce
  3. 从 tar 导入镜像(镜像备份下来的 tar)

    1
    docker load -i ./backup.tar

注意:以上会备份镜像的多层。

容器的备份还原

  1. 备份容器

    1
    docker export php > phprongqi.tar
  2. 还原成镜像

    1
    docker import ./phprongqi.tar php

注意:备份的只是一层镜像

容器的日志

日志位置

docker 日志建议输出控制台,控制台日志存储在主机上

先查看 Logging Driver 类型,默认应该是 json 格式

1
docker info | grep "Logging Driver"

json 格式的日志在 /var/lib/docker/containers/<containerID>/<containerID>-json.log
local 格式的日志在 /var/lib/docker/containers/<containerID>/local-logs/container.log

控制日志大小

vi /etc/docker/daemon.json

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