大家都知道Docker Engine是一种开源容器化技术,主要用于构建和容器化应用程序。Docker Engine 充当客户端 - 服务器应用程序,具有如下特点:
- 具备长时间运行的守护进程的服务dockerd;
- API 指定程序可以用来与 Docker 守护程序交互和指令接口;
- 命令行界面 (CLI) 客户端docker。
1.、Docker常用命令
(1) 登录本地仓库
docker login 仓库地址 --username xx --password xx
(2) 查找镜像
docker images| grep 镜像名称
(3) 拉取镜像
docker pull 镜像名称
(4) 推送镜像
docker push 镜像名称
(5) 查看镜像详情
docker inspect imageId
docker inspect 容器名称 | grep IPAddress #查看Docker容器ip
(6) 从Dockerfile文件构建镜像
docker build -t 镜像名称:Tag **.**
示例:
docker build -t acimagehub.com.cn/projectCode_dev/cdp-export:202105_XM_0525_v1.01 . #Dockerfile需在当前目录
或
docker build -t acimagehub.com.cn/projectCode_dev/cdp-export:202105_XM_0525_v1.01 -f 所在目录的Dockerfile文件 . #例如/opt/Dockerfile
202105:月度,0525:版本分支,v1.01:版本号
docker history 镜像名称:Tag #查看镜像构建历史
(7) 重命名镜像名称
说明:重命名后会生成一个新的镜像,将旧镜像删除即可
#命令格式:
docker tag 镜像id 仓库:标签
或:
docker tag 旧镜像名 新镜像名
# docker tag 470671670cac mysql:latest
(8)镜像搜索
docker search 镜像名称 #需要联网或联本地仓库
(9)从镜像导出tar包
docker save [options] images [images...]
命令:
docker save 镜像名 > 镜像名.tar或
或
docker image save -o 镜像.tar 镜像
示例:
docker save nginx >/opt/nginx.tar
或
docker image save -o nginx.tar docker.io/nginx:latest
`说明`: 其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是`源镜像名(name:tag)`
(10)加载镜像tar包
docker load [options]
或
cat 镜像.tar | docker load
示例:
docker load nginx.tar
(11)从容器导出tar包
docker export [options] container
示例:
docker export -o nginx-test.tar nginx-test
区别:其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是`源容器名(name)`
(12)加载容器tar包
docker import [options] file|URL|- [REPOSITORY[:TAG]]
示例:
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp
(13)启动镜像
docker run -it 镜像ID /bin/bash
示例:
docker run -it 470671670 /bin/bash
或:
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
`参数说明`:
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
-v:把宿主机的/data/registry目录绑定 到 容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口,访问宿主机的5000端口就访问到registry容器的服务了;
--restart=always:这是重启的策略,假如这个容器异常退出会自动重启容器;
--name registry:创建容器命名为registry,你可以随便命名;
registry:latest:这个是刚才pull下来的镜像;
(14)查看容器进程
docker ps
docker ps --all
(15) 查看容器PID
docker container top <container>
docker container inspect <container>
示例:
docker container top redis #输出PID和其他信息
或
docker inspect -f '{{.State.Pid}}' redis #直接输出PID
(16) 删除镜像
>删除所有容器:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
>删除images:
docker rmi <image id>
>删除untagged images(id为<None>):
docker rmi $(docker images | grep "^" | awk "{print $3}")
>删除全部image:
docker rmi $(docker images -q)
(17)进入容器
dcker exec [OPTIONS] CONTAINER COMMON [ARG...]
示例:
docker exec -it 775c7c9ee1e1 /bin/bash
(18) 查看容器日志
docker logs -f -t --tail 行数 容器名
示例:
docker logs -f -t --tail 10 775c7c9ee1e1
2、docker高级使用
(1)删除none的镜像
docker images
docker rmi $(docker images | grep "none" | awk '{print $3}') //直接删除镜像会报错
#删除none镜像的正确方式
docker stop $(docker ps -a | grep "Exited" | awk '{print $1 }') //停止容器
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }') //删除容器
docker rmi $(docker images | grep "none" | awk '{print $3}') //删除镜像
(2)export和save命令使用说明
export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
基于第二点,export导出的文件再import回去时,无法保留镜像所有历史(即每一层layer信息,不熟悉的可以去看Dockerfile),不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。如下图所示,nginx:latest是save导出load导入的,nginx:imp是export导出import导入的。

使用说明:若是只想备份images,使用save、load即可若是在启动容器后,容器内容有变化,需要备份,则使用export、import。
3、搭建docker私有仓库
参考文档:
https://www.php.cn/docker/463389.html
https://www.php.cn/docker?p=2
4、如何更换国内镜像源
4.1、从官方下载
通过命令,直接从中国官方镜像加速地址下载,可通过 registry.docker-cn.com 访问
docker pull registry.docker-cn.com/myname/myrepo:mytag
`注`:除非您修改了Docker守护进程的–registry-mirror参数,否则您将需要完整地指定官方镜像的名称。例如,library/ubuntu、library/redis、library/nginx
4.2、 Docker守护进程配置加速器
通过配置文件启动Docker,修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
#阿里镜像地址:http://mirrors.aliyuncs.com
#网易镜像地址:http://hub-mirror.c.163.com
修改保存后,重启 Docker 以使配置生效。
sudo systemctl daemon-reload
sudo systemctl restart docker
或者一步到位:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://db1jo88d.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
5、Docker部署
5.1、部署前提
(1)Docker 要求 CentOS 系统的内核版本高于 3.10 ,安装前提条件验证CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
(2)查看CentOS版本,本次安装以CentOS 7.8为例
通过 cat /etc/redhat-release 命令查看OS版本
5.2、在线安装
请参考官方文档:https://docs.docker.com/engine/install/centos/ ,总结起来如下几个步骤:
(1)添加镜像源
yum install -y yum-utils
#建议使用国内镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(2)安装docker
#安装最新版本
yum install docker-ce docker-ce-cli containerd.io
#安装指定版本
yum install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io
(3)启动docker
systemctl enable docker #设置开机自动启动
systemctl start docker #启动docker

5.3、离线安装
(1) 依赖包如下:
第一部分 下载地址(http://mirrors.aliyun.com/docker-ce/linux/centos/ 或 https://download.docker.com/linux/centos/)
docker-ce-18.09.9-3.el7.x86_64.rpm
docker-ce-cli-18.09.9-3.el7.x86_64.rpm
containerd.io-1.2.6-3.3.el7.x86_64.rpm
第二部分 下载地址(http://mirrors.163.com/centos/7/os/x86_64/Packages/)
audit-libs-python-2.8.5-4.el7.x86_64.rpm
checkpolicy-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-14.el7.x86_64.rpm
libcgroup-0.41-21.el7.x86_64.rpm
python-IPy-0.75-6.el7.noarch.rpm
policycoreutils-python-2.5-34.el7.x86_64.rpm
policycoreutils-2.5-34.el7.x86_64.rpm
setools-libs-3.3.8-4.el7.x86_64.rpm
第三部分 下载地址(http://mirror.centos.org/centos/7/extras/x86_64/Packages/)
container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
(2)执行安装
将所有依赖放到Linux的同一个文件夹,如下图所示:

执行本地部署命令:
yum localinstall *.rpm -y

(3) 启动docker
设置docker开机自动启动,并启动服务
systemctl enable docker
systemctl start docker

本文详细介绍了Docker的基本命令,如登录、查找、拉取和推送镜像,构建、重命名及查看镜像,启动容器,管理镜像和容器等。还涵盖了Docker的高级使用,包括删除none镜像的正确方式,export与save命令的区别,以及如何搭建私有仓库和更换国内镜像源。此外,还提到了Docker在CentOS上的安装方法,包括在线和离线安装步骤。

2248

被折叠的 条评论
为什么被折叠?



