整体容器服务层面
# 安装容器服务 apt install docker.io # 或者 curl -fsSLo- get.docker.com | /bin/sh # 启动 systemctl start docker # 自动启动 systemctl enable docker # --help docker stats --help docker container --help # 列出所有容器 docker ps -a # docker 安装后有2个重要目录 # * /var/lib/docker/containers # * /var/lib/docker/overlay2 # docker ps -a 运行后 会显示 CONTAINER ID < ba5148927a1e> # ba5148927a1e 就是 hello-world 这个容器的 ID # /var/lib/docker/containers/ba5148927a1e98322f8628650e8ef3b3ddd38e88bb59669dadf82433e932be7a (ID前缀的这个长目录就还是容器目录) # 里面保存了这个容器的配置,主要保存在 config.v2.json文件中, # ID前缀….log 就是这个容器的运行日志 docker logs ba5148927a1e
Run docker
# -d run as daemon, in background # --name unique name, referencable later # --link depends on other docker # -p port mapping, host_port:container_port docker run -d --name nextcloud --link mysqlnc -v /root/nextcloud/data:/data -p 3000:80 tag/image_name # -i interactive # -t in a terminal # ubuntu: image name # /bin/bash: run docker之后 docker run -it ubuntu /bin/bash
进入容器
# 如果从这个容器退出,会导致容器的停止 docker attach <name-or-id> # 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因 docker exec -it <name-or-id> /bin/bash
容器导出(snapshot)和导入
docker export cc3f2ff51cab > ubuntu.tar docker import http://example.com/exampleimage.tgz example/imagerepo # or cat docker/ubuntu.tar | docker import - test/ubuntu:v1
资源使用情况(内存,CPU)
docker stats docker stats --no-stream <name-or-id> # 找到pid ps -ef | grep -i 70b6b9f35933 top -p 4954 pmap -d 4954 # 删除清理空间 # 回收未使用的资源 docker system prune # 显示所有docker images docker images # 删除所有没有container使用的image docker image prune -a
容器命令
# get a list of all containers # 这两条命令效果一样 docker ps -a docker container ls -a # 停止某容器id docker stop cc3f2ff51cab docker restart cc3f2ff51cab # 受不了了 docker kill container_id_or_name # 移除容器 docker rm cc3f2ff51cab # To remove all stopped containers docker container prune # 展示某容器的log docker logs log_id # like tail -f docker logs -f container_id # 容器的5000端口映射到了宿主机的的49155端口 docker port cc3f2ff51cab 0.0.0.0:49155 # 显示本机镜像 docker images # 查看Ubuntu镜像的历史 docker history ubuntu
重启Policy
docker container update --restart=always 容器名字/id systemctl restart docker
卸载或删除
apt purge docker docker-engine docker.io containerd runc apt autoremove --purge docker-engine rm -rf /var/lib/docker # This deletes all images, containers, and volumes # 删除所有容器 docker rm -f $(docker ps -qa) # 删除所有镜像 docker rmi -f $(docker images -qa)
特别技巧
# 复原最初的 docker run 命令的所有原始参数 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike docker_name_or_id
Mac上安装和使用Docker
Mac安装
去 https://download.docker.com/mac/static/stable/ 或者 https://hub.docker.com/editions/community/docker-ce-desktop-mac/ 下载
安装之后,看到状态栏里的小🐳。
也可以在terminal里面输入
docker version # or docker run hello-world
换国内的源
对于使用 macOS 的用户,在任务栏点击 Docker Desktop 应用图标 -> Perferences
,在左侧导航菜单选择 Docker Engine
,在右侧像下边一样编辑 json 文件。修改完成之后,点击 Apply & Restart
按钮,Docker 就会重启并应用配置的镜像地址了。
- 阿里云加速器(点击管理控制台 -> 登录账号(淘宝账号) -> 右侧镜像中心 -> 镜像加速器 -> 复制地址)
- 网易云加速器
https://hub-mirror.c.163.com
- 百度云加速器
https://mirror.baidubce.com
docker info
给容器占用瘦身 – 减少磁盘空间
# 列出所有的docker - 包括stopped docker ps -a # 类似于 Linux 上的df命令,用于查看 Docker 的磁盘使用情况: docker system df # 用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像)。 docker system prune # 清理得更加彻底,可以将没有容器使用 Docker 镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉了…所以使用之前一定要想清楚吶。 docker system prune -a # 也可以手动清理 Docker 镜像/容器/数据卷 ### 删除所有关闭的容器 docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm ### 删除所有 dangling 镜像(即无 tag 的镜像): docker rmi $(docker images | grep "^<none>" | awk "{print $3}") ### 删除所有 dangling 数据卷(即无用的 volume): docker volume rm $(docker volume ls -qf dangling=true)