一、docker常用命令

1、安装命令

sudo apt install docker.io

2、镜像管理

# 查看本地所有镜像
docker images
# 移除指定镜像
docker image rm <image_name>:<tag>/<image_id>

# 其他命令
# dockerhub(https://hub.docker.com/)实在是太慢了
# 创建容器使用本地不存在的镜像时,默认会从dockerhub拉取
docker pull
docker commit
docker tag
docker login
docker push

3、容器管理

# 查看当前运行docker容器
docker ps
# 查看环境中的所有docker容器
docker ps -a

# 指定image创建后台运行容器,进程1为:/bin/bash
docker run -itd --name <container_name> <image_name>:<tag> /bin/bash

# 启动/停止/进入容器
docker start <container_name/id>
docker stop <container_name/id>
docker attach <container_name/id>

# 指定运行容器中的进程
# 使用attach进入容器退出默认会停止容器,可以使用exec运行/bin/bash创建新的交互终端
docker exec -it <container_name/id> /bin/bash

#移除指定容器
docker rm <container_name/id>

# 将本地文件cp到容器内
docker cp <file_local_path> <containe_name/id>:<file_docker_path>
# 将容器内的文件cp到本地
docker cp <containe_name/id>:<file_docker_path> <file_local_path>

4、本地镜像分享

# 从容器导出镜像文件(当前运行容器的快照)
docker export <container_id/name> > <image_name>.tar
# 将镜像文件导入本地
docker import <image_name>.tar <image_name>:<image_tag>

# 将本地镜像导出(包含image的所有数据层,常用于迁移或备份image)
docker save -o <image_name>.tar <image_id/name>
# 将镜像文件导入到本地(不可重命名)
docker load -i <image_name>.tar

二、Docker高级操作

1、取消docker的sudo权限

1、将当前用户添加到docker组

sudo gpasswd -a ${USER} docker\

2、更新docker group

newgrp docker

3、测试验证

docker version
2、使能IPv6网络

1、vim /etc/docker/daemon.json

{
    "experimental": true,
    "ipv6": true,
    "ip6tables": true,
    "fixed-cidr-v6": "2607:f0d0:1002:51::/66"
}

2、重启docker

sudo systemctl restart docker
3、在docker容器内使用systemd

1、指定image创建容器

docker run -it --name <container_name> --privileged <image_name>:<tag> /bin/bash 

2、更新软件源,部署systemd

# 更新软件源
apt update
# 更新软件
apt upgrade

# 安装systemd
apt install systemd
ln -s /lib/systemd/systemd /usr/sbin/init

# 也可以同时安装其他所需软件
# ...

安装完成后,在container内执行"exit"退出容器。
若需要docker容器支持systemd,需要将/usr/sbin/init设置为1号进程(默认为/bin/bash),因此我们需要将这个容器打包为新的镜像,基于新的镜像再创建支持systemd的新容器。

3、将当前容器保存为新镜像

docker commit -a "<author>" -m "<commit_info>" <container_name> <image>:<tag>

4、创建使用支持systemd的容器

# 创建容器
docker run -itd --name <container_name> --privileged <image_with_systemd_name>:<tag> /usr/sbin/init
# 进入容器
docker exec -it <container_name> /bin/bash
04-07 06:03