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...]
|
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:构建容器后调用,在容器启动时才进行调用。
注意:本文中数据以及内容若有侵权,请第一时间联系删除。
本文是作者个人学习后的总结,未经作者授权,禁止转载,谢谢配合。