一、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