Docker——镜像、容器与构建

1、Docker命令的基本使用

1.1 运行一个ubuntu并尝试与该container交互,并输出"EN_and_FN_in_PY"

(1)docker container run -it --name ubuntu2204 ubuntu:22.04 /bin/bash

(2)在container中运行uname -a

(3)在container中运行echo ${EN_and_FN_in_PY}(如:echo 68zhangsan)

1.2 从container中detach,然后attach

(1)按<CTRL - p>, <CTRL - q>

(2)docker container ls

(3)docker container attach ubuntu2204

(4)在container中运行top

1.3 从container中detach,然后exec

(1)按<CTRL - p>, <CTRL - q>

(2)docker container ls

(3)docker container exec -it ubuntu2204 /bin/bash

(4)在container中运行top

(5)在container中运行exit

(6)docker container ls

1.4 停止container并删除

(1)docker container stop ubuntu2204

(2)docker container prune

2、docker container commit与docker image build构建image 

2.1 docker container commit构建image

(1)docker container run -it --name centos7 centos:7 /bin/bash

在container中新建/etc/yum.repos.d/nginx.repo文件并将以下内容输入文件中(可通过vi /etc/yum.repos.d/nginx.repo新建并编辑该文件):
# start of /etc/yum.repos.d/nginx.repo
    [nginx]
    name=nginx repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=0
    enabled=1
# end of /etc/yum.repos.d/nginx.repo

(2) docker container commit centos7 centos7-with-nginx-commit

(3)docker image history centos7-with-nginx-commit

2.2  docker image build构建image

(1)新建目录,该目录下包括两个文件Dockerfile和nginx.repo

.

├── Dockerfile

└── nginx.repo

0 directories, 2 files

Dockerfile文件内容如下(请将LABEL中的XXX<xxx@qq.com>修改成你自己的信息❗):
# escape=\
ARG centos_version=7
FROM centos:${centos_version}
LABEL maintainer XXX<xxx@qq.com>
COPY ./nginx.repo /etc/yum.repos.d 
RUN \
        yum makecache && \
        yum install -y nginx &&\
        yum clean all
RUN echo "Hello! Please test the nginx server! " > /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
nginx.repo的文件内容如下:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

 (2)docker image build -t centos7-with-nginx-dockerfile .

(3) docker image history centos7-with-nginx-dockerfile

(4) docker container run --rm -d -p 8000:80 --name my-nginx centos7-with-nginx-dockerfile

(5)# or open url in browser

(6)curl 127.0.0.1:8000

(7)docker container stop my-nginx

3、docker image build构建并运行python程序

(1)新建目录,该目录下包括两个文件Dockerfile和app/app.py

.

├── Dockerfile

└── app

           └── app.py

1 directory, 2 files

Dockerfile文件内容如下(请将LABEL中的XXX<xxx@qq.com>修改成你自己的信息❗):
ARG os_version=22.04
FROM ubuntu:${os_version}
LABEL maintainer XXX<xxx@qq.com>
COPY ./app /app
RUN \
        apt update -y && \
        apt install -y python3 && \
        apt clean all
RUN \
        ln -s /usr/bin/python3 /usr/bin/python && \
        ln -s /usr/bin/pip3 /usr/bin/pip
ENTRYPOINT ["python"]
CMD ["/app/app.py"]

app.py文件内容如下:
#!/usr/bin/python 
print("Hello, World!")

(1)docker image build -t py-demo-app:0.0.1 .

(2)docker container run --rm py-demo-app:0.0.1

4、思考题 

(1)docker container attach和docker container exec在container中的process tree有什么不一样?

        答:1) docker container attach:会通过连接stdin,连接容器内输入输出流,会在exit后终止进程。2) docker container exec:会连接到容器,可以像SSH一样进入容器的内部,进行操作,可以通过exit退出容器,但是不会终止容器,影响容器的运行。

(2)docker container exec -it ubuntu2204 /bin/bash时,在container中运行exit,container退出了?

        答:没有退出容器。

(3)为什么要新建一个目录用于存储Dockerfile和nginx.repo文件?

        答:减少文件的拉取工作。

4、命令总结

命令个人的理解

docker container run -it --name ubuntu2204 ubuntu:22.04 /bin/bash

启动新的容器,执行这个命令后会在前台启动一个ubuntu:22.04容器,并运行bash shell

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

  1. docker container run :在新容器中运行命令
  2. -it:为容器分配一个伪输入终端,意思应该就是使容器具备交互性并与终端相连
  3. --name:为容器指定一个名称(ubuntu2204)

uname –a

该命令可以显示系统名、节点名称、操作系统的发行版本号、内核版本

docker container ls

该命令用于列出所有运行状态的容器

docker container attach ubuntu2204

该命令用于将名称为ubuntu2204的容器附加到正在运行的容器

docker container exec –it ubuntu2204 /bin/bash

该命令可以允许在运行状态的容器中,启动一个新进程。

执行该命令后会在容器的内部启动一个bash shell 的进程,并连接到该shell,要注意的是,用于创建容器的镜像是必须包含bash shell(上面的第一个命令创建ubuntu2204容器时,镜像ubuntu:22.04 就运行了bash shell),如果不包含,此命令不会生效。

在container中运行top

该命令用于查看容器中运行的进程信息,如果没有/bin/bash终端来交互执行投票命令时,可以使用docker top命令来查看

在container中运行exit

该命令用于退出正在运行的container,容器会停止运行

docker container stop ubuntu2204

该命令是表示停止一个正在运行的容器(ubuntu2204)

docker container prune

该命令用于取出所有停止的容器

5、文件总结

5.1 repo文件

  • repo(repositort)文件是yum源(软件仓库)的配置文件,通常一个repo文件定义一个或者多个软件仓库的细节内容,例如:我们该从哪里下载需要安装或升级的软件包,repo文件中设置的内容会被yum读取和应用
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

(1)[nginx]:是yum源的id或是标识。

(2)name:是yum源的名称(英文字符串)。

(3)baseurl:是服务器最重要的部分,yum源文件存储的位置,可以是网络协议也可以是本地的文件,本地文件用file://表示协议,后面跟文件的路径,网络协议用对应协议标识,例如http://。

(4)gpgcheck=0:是标识yum源gbk校验开关是否打开,1为开启状态,0为关闭状态,关闭后不做gpk校验。

(5)enabled=1:是表示源开关是否打开,1为开启状态,0为关闭状态,关闭状态时,yum 在安装或升级软件包时不会将该仓库做为软件包提供源,使用这个选项,可以启用或禁用软件仓库。

 5.2 Dockerfile文件

# escape=\

ARG centos_version=7

FROM centos:${centos_version}

LABEL maintainer XXX<xxx@qq.com>

COPY ./nginx.repo /etc/yum.repos.d

RUN \
    yum makecache && \    
    yum install -y nginx &&\
    yum clean all
RUN echo "Hello! Please test the nginx server! " > /usr/share/nginx/html/index.html

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

(1)AGV:指定镜像的版本信息。

(2)FROM:指定创建镜像的基础镜像(必须有)。

(3)LABEL:指定生成镜像的源数据标签。

        LABEL maintainer  XXX<xxx@qq.com> 指定镜像作者信息

(4)COPY:复制宿主机数据到镜像内部使用。

(5)RUN:在镜像容器中执行命令。

        yum makecache && \     # 生成缓存

        yum install -y nginx &&\  # 安装nginx

        yum clean all            # 清除缓存

(6)RUN echo "Hello! Please test the nginx server! " > /usr/share/nginx/html/index.html

   表示输出Hello! Please test the nginx server! ,构建好的镜像一个/usr/share/nginx/html/index.html 文件。

(7)EXPOSE:用于指定与外界交互的端口。

(8)CMD:构建容器后调用,在容器启动时才进行调用。

注意:本文中数据以及内容若有侵权,请第一时间联系删除。

           本文是作者个人学习后的总结,未经作者授权,禁止转载,谢谢配合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cherry晴

创作不易,多多包涵~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值