Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
安装
ubuntu
参考官网文档。
amazon linux 2
1 2 3
| sudo amazon-linux-extras install epel -y sudo amazon-linux-extras enable docker sudo yum install -y docker
|
配置
修改 data 目录
1 2 3 4
| # vim /etc/docker/daemon.json { "data-root": "/data/docker" }
|
容器
从镜像创建新容器
1 2 3 4
| $ docker run -it -d --restart=always --name=ubuntu-18.04 ubuntu:18.04
# 指定端口 $ docker run --restart=always -p 8080:8080 <image-name>
|
启动已创建容器
1
| $ docker start container_id/container_name
|
查看运行的容器
使用docker ps
命令可以查看所有正在运行中的容器列表,使用docker inspect
命令我们可以查看更详细的关于某一个容器的信息。
停止运行容器
1
| docker stop container-name
|
示例
为了显示更直观, 删除部分内容并使用省略号代替.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| root@VirtualBox:/home/conpot# docker ps CONTAINER ID IMAGE ... 5a794455532d nginx:alpine ... 8518250908b5 voxxit/rsyslog ... 77613e26eb6f elk_logstash ... 7effd23c7005 elk_kibana ... root@VirtualBox:/home/conpot# docker stop 5a794455532d 5a794455532d root@VirtualBox:/home/conpot# docker ps CONTAINER ID IMAGE ... 8518250908b5 voxxit/rsyslog ... 77613e26eb6f elk_logstash ... 7effd23c7005 elk_kibana ... root@VirtualBox:/home/conpot# docker stop 8518 8518 root@VirtualBox:/home/conpot# docker ps CONTAINER ID IMAGE ... 77613e26eb6f elk_logstash ... 7effd23c7005 elk_kibana ...
|
停止所有运行的容器
1 2 3 4 5 6 7
| root@VirtualBox:/home/conpot# docker ps -q 77613e26eb6f 7effd23c7005 root@VirtualBox:/home/conpot# docker stop $(docker ps -q) 77613e26eb6f 7effd23c7005 root@VirtualBox:/home/conpot# docker ps -q
|
重命名容器
1
| $ docker rename CONTAINER NEW_NAME
|
更新容器设置
1
| $ docker update --restart=always container_name/container_id
|
执行命令
1
| $ docker exec -it [container] /bin/bash
|
列出所有容器
删除容器
1
| $ docker docker rm container-name
|
迁移容器
1 2 3 4 5 6 7 8 9 10 11 12
| # 为 container 创建镜像 $ sudo docker commit <container-name> <image-name> # 导出镜像 $ sudo docker save <image-name> > image-name.tar # 或 sudo docker save <image-name> -o image-name.tar
#
# 导入镜像 $ sudo docker load < image-name.tar # 创建 container $ sudo docker run -d --name <container-name> ... <image-name>
|
镜像
导出镜像
1 2 3 4 5
| $ docker save busybox > busybox.tar $ docker save -o fedora-all.tar fedora $ docker save -o fedora-latest.tar fedora:latest # 压缩 $ docker save myimage:latest | gzip > myimage_latest.tar.gz
|
加载镜像
1 2
| $ docker load -i docker-output.tar $ docker load < docker-output.tar
|
Search
下载
查看下载的容器
1 2
| $ docker images $ docker images ubuntu
|
分析镜像大小
参考工具 dive。
1
| dive hub.docker.com/<user>/<image>:<tag>
|
删除镜像 / 清理
1 2 3
| $ docker image remove <id> $ docker image prune $ docker image prune -a
|
导出/加载容器
1 2
| docker export container-name > latest.tar docker export --output="latest.tar" container-name
|
非 root 用户使用 docker
ubuntu
https://www.jianshu.com/p/35cdb71a32d3
1 2 3 4 5 6
| $ sudo groupadd docker $ sudo usermod -aG docker $(whoami)
# 生效 $ sudo service docker restart $ newgrp - docker
|
macos
bash rc 添加如下内容。
1 2 3 4
| unset DOCKER_TLS_VERIFY unset DOCKER_CERT_PATH unset DOCKER_MACHINE_NAME unset DOCKER_HOST
|
拷贝文件
从容器拷贝至宿主机
1
| docker cp <container-name>:/path/to/file /path/to/dest
|
从宿主机拷贝至容器
1
| docker cp /path/to/file <container-name>:/path/to/dest
|
docker hub
1 2 3 4 5
| # 登录 docker hub docker login
# 登录私有仓库 docker login hub.private.com
|
配置代理
1 2 3 4 5 6 7 8 9 10 11
| sudo mkdir -p /etc/systemd/system/docker.service.d sudo touch /etc/systemd/system/docker.service.d/proxy.conf sudo chmod 777 /etc/systemd/system/docker.service.d/proxy.conf sudo echo ' [Service] Environment="HTTP_PROXY=socks5://192.168.6.19:3213" Environment="HTTPS_PROXY=socks5://192.168.6.19:3213" ' >> /etc/systemd/system/docker.service.d/proxy.conf sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl restart kubelet
|
参考
配置网络
centos
1 2 3 4 5 6
| ```
# 修改 `/var/lib/docker` 路径
```shell sudo vim /lib/systemd/system/docker.service
|
参考
异常
failed to start daemon: Devices cgroup isn't mounted
1 2 3 4 5 6
| yum install libcgroup libcgroup-tools libcgroup-pam systemctl enable cgconfig systemctl start cgconfig
# 重启 reboot
|
常用操作
查看磁盘占用
1 2 3 4 5
| docker system df -v # 会打印 image、container 的磁盘占用
# 查看容器磁盘占用 docker ps --size
|
清理无用镜像
1 2 3 4 5 6 7 8
| docker image prune # 仅清理镜像
# !危险操作 docker system prune # 要同时清理未使用的镜像、停止的容器、未使用的网络和未挂载的卷
# !危险才做,可能误删 # 尝试删除所有镜像 docker image ls -a | awk '{print $3}' | xargs docker image rm -
|