Docker镜像与容器实践

本博客链接:https://security.blog.csdn.net/article/details/128712456

一、引子

镜像和容器是不同的概念,本文主要是为了通过实践来强化对这两种不同概念的理解。

二、安装docker

安装docker,执行以下命令即可:

# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置国内源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker,默认最新版
yum -y install docker-ce
# 启动docker服务
systemctl start docker
# 设置自启动
systemctl enable docker
# 验证
docker -v

三、镜像实践

3.1、Dockerfile详解

请阅读我此前写的一篇博客:Dockerfile详解

3.2、Dockerfile构建镜像

我们以这个Dockerfile来举例(D不能小写):

FROM ubuntu
MAINTAINER docker_user [email protected]
RUN apt-get update && apt-get install -y nginx
CMD ["nginx","-g","daemon off;"]

执行镜像构建命令:

docker build -f Dockerfile -t nginx:v1 .

在这里插入图片描述

经过一通运行之后,镜像够构建成功了

在这里插入图片描述

从该docker build命令中我们可以看出构建的镜像名为nginx:v1,当然开发者也可以自己命名。从上述输出内容的先后顺序我们可以看出,docker构建镜像是按照Dockerfile中开发者定义的命令由上至下依次执行的,且均会生成对应的层。我们可通过如下命令查看该镜像的层:

在这里插入图片描述

3.3、docker commit构建镜像

除了通过Dockerfile构建镜像,我们还可以通过docker commit命令构建镜像,两者主要区别为生成镜像的大小差异,通过Dockerfile构建的镜像只有在docker build时才会增添新的资源,而docker commit基本上是获取运行中的容器快照保存为镜像,如果运行的容器正在生成大量日志或更新包文件,那么当docker commit后这些数据会被保存至镜像中,因而通常docker commit构建的镜像相对Dockerfile构建的要大一些。

下面我们通过docker commit命令构建上述nginx:v1镜像,在此之前,我们需要先将镜像启动为容器,如下所示:

在这里插入图片描述

通过docker exec命令进入容器并安装网络配置工具net-tools,如下所示:

在这里插入图片描述

然后退出容器,在宿主机上通过docker commit构建一个名为nginx:v2的新镜像,如下所示:

在这里插入图片描述

3.4、镜像的其他操作

镜像查看:

docker images
# 得到REPOSITORY、TAG、IMAGE ID、CREATED、SIZE字段值,后续会用到

镜像删除:

docker rmi <REPOSITORY>:<TAG>

镜像上传:

# 给镜像打标签
docker tag <REPOSITORY>:<TAG> <仓库地址>/<项目名>/<REPOSITORY>:<TAG>

# 镜像上传
docker push <仓库地址>/<项目名>/<REPOSITORY>:<TAG>

镜像拉取:

# 拉取私有仓库镜像
docker pull <仓库地址>/<项目名>/<REPOSITORY>:<TAG>

# 拉取官方镜像仓库的镜像
docker pull <REPOSITORY>:<TAG>

镜像的压缩:

docker save nginx:v1 > /tmp/nginx.tar

镜像的导入:

docker load < /tmp/nginx.tar

四、容器实践

4.1、容器创建

通过docker run命令将构建的镜像运行为容器,具体命令如下:

docker run -dt --name nginx -p 8080:80 nginx:v1

其中:

-d:代表docker将容器在后台运行并输出该容器ID;
-t:代表docker为该容器分配一个虚拟终端;
--name:代表为容器取一个名字;
-p:代表设置该容器的端口映射,其中冒号左边代表宿主机映射端口,右边代表容器端口,容器端口也是Dockerfile中设置的暴露端口;
nginx:v1: 代表通过此镜像启动容器

其它命令查看:

docker run --help

4.2、容器执行

在应用开发过程中,我们不可避免要进入容器并进行相应调试,Docker的相应的命令如下:

docker exec -it 422 /bin/bash

其中:

-t:代表分配一个伪终端;
-i:代表保持交互模式;
422:代表容器ID,只要是能够证明唯一就可以,不用全输入;
/bin/bash:代表以bash方式与容器进行交互;

其它命令查看:

docker exec --help

4.3、容器删除

删除容器命令:

docker rm <CONTAINER ID>

强制删除容器命令:

docker rm -f <CONTAINER ID>

4.4、停止运行的容器

停止运行的容器命令:

docker stop <CONTAINER ID>

4.5、容器查看

查看正在运行的容器

docker ps

查看所有容器(包括正在运行的以及停止运行的):

docker ps -a

查看单一容器

docker inspect <CONTAINER ID>

查看容器日志:

docker logs <CONTAINER ID>

猜你喜欢

转载自blog.csdn.net/wutianxu123/article/details/128712456