Docker

整体容器服务层面

# 安装容器服务
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 &gt; 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 就会重启并应用配置的镜像地址了。

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)

Leave a Reply