docker 安装
官方安装脚本
1
| curl -fsSL get.docker.com | bash
|
阿里云安装(centos)
1 2 3 4 5 6 7 8 9 10 11 12 13
| sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast sudo yum -y install docker-ce
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 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
| 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
| 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"
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -q)
docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $(docker ps -a -q)
docker inspect --format='{{.Name}}' $(docker ps -aq) docker inspect --format='{{.Name}}' $(docker ps -aq)|cut -d"/" -f2
docker inspect --format '{{ .Config.Hostname }}' $(docker ps -q)
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`
|
容器备份还原
镜像的备份还原
commit将容器保存成镜像
1
| docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
|
将镜像导出成tar (镜像是分层的,可以回滚,)
1
| docker save -o ./backup.tar gitlab/gitlab-ce
|
从tar导入镜像(镜像备份下来的tar)
1
| docker load -i ./backup.tar
|
注意:以上会备份镜像的多层。
容器的备份还原
备份容器
1
| docker export php > phprongqi.tar
|
还原成镜像
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" } }
|