首页
统计
友联
直播
更多
壁纸
关于
推荐
百度一下
Search
1
测试
3 阅读
2
欢迎使用 Typecho
2 阅读
3
ubuntu系统在原分区上使用LVM扩容
2 阅读
4
Hello World
1 阅读
5
博客应用悬浮音乐方法
1 阅读
默认分类
docker
技术杂谈
Typecho
linux
登录
/
注册
Search
标签搜索
docker
Gps's blog
累计撰写
9
篇文章
累计收到
0
条评论
首页
栏目
默认分类
docker
技术杂谈
Typecho
linux
页面
统计
友联
直播
壁纸
关于
推荐
百度一下
搜索到
5
篇与
的结果
2025-08-05
Dockerfile
什么是 Dockerfile?Dockerfile 是 Docker 用于构建镜像的文本配置文件,定义了镜像的构建步骤和环境配置,包含了构建 Docker 镜像的所有指令。使用 Dockerfile 定制镜像下面定制一个 nginx 镜像为例,构建好的镜像内会有一个/usr/share/nginx/html/index.html 的文件。创建 Dockerfile在一个空目录下,新建一个名为 Dockerfile 的文件,并在文件内添加 以下 内容。[root@lavm-5wutyiasaf gps]# vim Dockerfile [root@lavm-5wutyiasaf gps]# cat Dockerfile From nginx RUN echo "这是一个本地构建的nginx镜像" > /usr/share/nginx/html/index.html基本命令说明:FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制所需要的基础原始镜像。RUN:用于执行后面跟着的命令行命令。注:Dockerfile 的指令每执行一次都会在 Docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如,下面的写法会创建 3 层镜像:[root@lavm-5wutyiasaf gps]# cat Dockerfle FROM centos RUN yum -y install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis.tar.gz构建镜像在 Dockerfile 文件存放目录下,执行构建动作:[root@lavm-5wutyiasaf gps]# ls 1.txt Dockerfile [root@lavm-5wutyiasaf gps]# docker build -f Dockerfile -t nginx:1 .参数说明:-f:指定文件名。Dockerfile 必须以大写 D 开头命名为 Dockerfile,除非使用-f 参数指定其他文件名。-t:参数用于 指定镜像名称和标签。.:最后的点表示构建上下文路径。注意:上下文路径不要放无用的文件,因为 会一起打包发送给 Docker 引擎,如果文件过多会造成 构建过程缓慢。Dockerfile 指令详解指令说明示例关键细节FROM指定基础镜像,用于后续的指令构FROM ubuntu:22.04必须为第一条指令(ARG 除外)MAINTAINER指定 Dockerfile 的作者/维护者(已弃用,推荐使用 LABEL)MAINTAINER gps作用与 LABEL 指令类似,用于镜像添加作者、维护者、联系方式等元数据;仅限于指定维护者信息。LABEL添加镜像的元数据,使用键值对的形式LABEL version="1.0"比 MAINTAINER 更有广泛的用途,可以用来 添加更多类型的元数据信息,RUN在构建过程中在镜像中执行命令RUN apt-get update && apt-get install -y nginx合并命令可减少层数CMD指定容器创建时的默认命令(可以被覆盖)Shell 格式:CMD python app.pyExec 格式:CMD ["python","app.py"]一个 Dockerfile 里 只能包含一个 CMD 指令,如果有多个,只有最后一个 CMD 指令会 生效。ENTRYPOINT设置容器创建时的主要命令(不可被覆盖)ENTRYPOINT ["echo","hello"]该指令会在容器启动时始终执行,无论是否指定了其他命令,都不会被覆盖,而是作为容器的主要执行命令 。EXPOSE声明容器运行时监听的特定网络端口EXPOSE 80 ENV在容器内部设置环境变量ENV MY_NAME gpsENV APP_HOME /app容器启动时环境变量是 ENV 指定的值,运行时可通过 docker run 明的-e 选项还覆盖环境变量的值。ADD将文件、目录或远程URL复制到镜像中ADD app.py /app/ADD src/ /app/ADD https://example.com/file.tar.gz /tmp/ADD app.tar.gz /app/它类似于COPY指令,但在功能上更强大,除了复制文件和目录 ,该指令还 支持 自动解压缩。COPY将文件或目录复制到镜像中COPY app.py /app/COPY src/ /app/它不支持自动解压缩功能,与ADD指令相比,功能更简单明确。VOLUME为容器创建挂载点或声明卷单个目录:VOLUME ["/data"]多个目录:VOLUME ["/data","/var/log"] WORKDIR设置后续指令的工作目录WORKDIR /app USER指定后续指令的用户上下文USER myuser容器运行时,进程将以 myuser 用户的身份运行,而不是以 root 用户身份。ARG定义构建过程中的变量ARG MY_ENV=productionENV ENVIRONMENT=$MY_ENV ONBUILD当镜像被用作另一个构建过程的基础时,添加触发器
2025年08月05日
1 阅读
0 评论
0 点赞
2025-07-02
Docker 镜像使用
当容器运行时,使用的镜像如果在本地中不存在,Docker 就会自动从 Docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像资源下载。列出镜像列表我们可以使用 docker images 来列出本地主机上的所有镜像[root@lavm-5wutyiasaf ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/ubuntu v2 3e987db64805 26 hours ago 77.9MB test/ubuntu v1 906851c5bf30 26 hours ago 77.9MB ubuntu 22.04 b103ac8bf22e 13 days ago 77.9MB ubuntu latest bf16bdcff9c9 2 weeks ago 78.1MB nginx latest 1e5f3c5b981a 8 weeks ago 192MB mysql 8.0 355bbda86f66 8 weeks ago 772MB hello-world latest 74cc54e27dc4 4 months ago 10.1kB dko0/lsky-pro latest c89f58b471b2 2 years ago 838MB centos latest 5d0da3dc9764 3 years ago 231MB参数说明:REPOSITORY:表示镜像的仓库源TAG:镜像的标签IMAGE ID:镜像 IDCREATED:镜像创建时间SIZE:镜像大小关于标签同一仓库源可以有多个 TAG,代表这个仓库源的不同版本,如 ubuntu 的仓库源里,有 22.04、有 15.10,我们使用 REPOSITORY:TAG 来定义不同的镜像。使用指定版本的镜像,例如 ubuntu 15.10[root@lavm-5wutyiasaf ~]# docker run -it --name 15.10ubuntu ubuntu:15.10 /bin/bash Unable to find image 'ubuntu:15.10' locally 15.10: Pulling from library/ubuntu 7dcf5a444392: Pull complete 759aa75f3cee: Pull complete 3fa871dc8a2b: Pull complete 224c42ae46e7: Pull complete Digest: sha256:02521a2d079595241c6793b2044f02eecf294034f31d6e235ac4b2b54ffc41f3 Status: Downloaded newer image for ubuntu:15.10 root@355aaeb6bcfa:/#参数说明-i:交互式操作-t:终端--name 15.10ubuntu:容器命名为 15.10ubuntuubuntu:15.10 :指定 ubuntu 15.10 版本镜像为基础来运行容器/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash获取新的镜像当我们在本地主机上使用一个不存在的镜像时,Docker 就会自动下载这个镜像。如果想预先下载的话可以使用 docker pull命令来下载。[root@lavm-5wutyiasaf ~]# docker pull httpd Using default tag: latest latest: Pulling from library/httpd dad67da3f26b: Already exists d0a755bf09a1: Pull complete 4f4fb700ef54: Pull complete be5c5a616c3a: Pull complete d1042d58e186: Pull complete c06cec1379c2: Pull complete Digest: sha256:f6557a77ee2f16c50a5ccbb2564a3fd56087da311bf69a160d43f73b23d3af2d Status: Downloaded newer image for httpd:latest docker.io/library/httpd:latest查找镜像可以从 Docker Hub 官网上搜索我们想找的镜像如图所示删除镜像镜像删除使用 docker rmi 命令,比如[root@lavm-5wutyiasaf ~]# docker rmi test/ubuntu:v2 Untagged: test/ubuntu:v2 Deleted: sha256:3e987db64805f8dc339715d3ab86fbb5292b20a6d86d54bf36aab37110581035创建镜像当我们从 docker 镜像仓库中下载的镜像已经无法满足我们的需求时,我们可以通过以下两种方式对镜像进项更改。1、 从已经创建的容器中更新镜像,并且提交这个镜像。2、使用 Dockerfile 指令来创建一个新的镜像。更新镜像更新镜像之前,我们需要使用镜像来创建一个容器:[root@lavm-5wutyiasaf ~]# docker run -i -t --name gpsubuntu ubuntu:22.04 /bin/bash root@b5725b3366a8:/# apt-get update root@b5725b3366a8:/# apt-get upgrade -y root@b5725b3366a8:/# exit完成操作之后我们可以用 docker commit 来提交容器副本:[root@lavm-5wutyiasaf ~]# docker commit -m="update ubuntu" -a="root" b5725b3366a8 root/ubuntu:v3 sha256:c6f36ed0bdfe94da595738b153ef554e544786e59645d04b054dd0fbbb96a8dc参数说明:-m:提交的描述信息-a:指定镜像作者b5725b3366a8:容器 IDroot/ubuntu:v3:指定要创建的目标镜像名构建镜像我们使用命令 docker build,从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfle 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。[root@lavm-5wutyiasaf ~]# mkdir -p /my-docker-images [root@lavm-5wutyiasaf ~]# cd /my-docker-images/ [root@lavm-5wutyiasaf my-docker-images]# ls [root@lavm-5wutyiasaf my-docker-images]# vim Dockerfile [root@lavm-5wutyiasaf my-docker-images]# cat Dockerfile FROM centos:6.7 MAINTAINER Fisher "fisher@sudops.com" RUN /bin/echo 'root:123456' | chpasswd RUN useradd sean RUN /bin/echo 'sean:123456' | chpasswd RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local EXPOSE 22 EXPOSE 80 CMD /usr/sbin/sshd -D [root@lavm-5wutyiasaf my-docker-images]#Dockerfile 参数说明:FROM centos:6.7:指定基础镜像(且必须是第一条指令)MAINTAINER Fisher:标注镜像维护者信息。RUN:RUN 指令告诉 Docker 在镜像内执行命令。EXPOSE:声明(但不强制开放)容器需要开放的端口,供运行时用-p 或--expose做映射。CMD:指定容器启动后的默认命令。使用 docker build 命令构建镜像:[root@lavm-5wutyiasaf my-docker-images]# docker build -t sean/centos:latest . [+] Building 1.4s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 297B 0.0s => [internal] load metadata for docker.io/library/centos:latest 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/5] FROM docker.io/library/centos:latest 0.0s => [2/5] RUN /bin/echo 'root:123456' | chpasswd 0.3s => [3/5] RUN useradd sean 0.3s => [4/5] RUN /bin/echo 'sean:123456' | chpasswd 0.2s => [5/5] RUN /bin/echo -e "LANG="en_US.UTF-8"" > /etc/default/local 0.3s => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:e9e69b3c803280a0ee538532fbbe96a89f79f7358466011659a4c4240f7a1d05 0.0s => => naming to docker.io/sean/centos:latest参数说明:-t:指定要创建的目标镜像.:Dockerfile 文件所在目录,可以指定绝对路径,也可以用.来表示当前路径设置镜像标签我们可以使用 docker tag 命令,为镜像添加一个新的标签:镜像名和标签自定义修改标签:语法:docker tag [OPTIONS] SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]参数说明:[OPTIONS] SOURCE_IMAGE[:TAG]: 你想打标签的原始镜像(可以用镜像名或镜像ID)。 TARGET_IMAGE[:TAG]: 你想赋予的新镜像名和标签。 [:TAG]:标签是可选的,不指定默认是 latest。# 使用镜像名和标签自定义修改标签 [root@lavm-5wutyiasaf ~]# docker tag sean/centos:latest seann/centos:6.7 [root@lavm-5wutyiasaf ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE sean/centos latest e9e69b3c8032 25 hours ago 232MB seann/centos 6.7 e9e69b3c8032 25 hours ago 232MB# 使用镜像ID自定义修改标签 [root@lavm-5wutyiasaf ~]# docker tag e9e69b3c8032 my/centos:6.8 [root@lavm-5wutyiasaf ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE my/centos 6.8 e9e69b3c8032 25 hours ago 232MB sean/centos latest e9e69b3c8032 25 hours ago 232MB seann/centos 6.7 e9e69b3c8032 25 hours ago 232MB
2025年07月02日
1 阅读
0 评论
0 点赞
2025-06-13
Docker容器操作
1、基本概念镜像(Image)容器的静态模板,包含了应用程序运行所需的所有依赖和文件。容器(Container)镜象是一个运行实例,具有自己的文件系统、进程、网络等,且时动态的。容器在镜像启动,并在运行时保持可变。2、常用命令命令功能实例docker run启动一个新的容器并运行命令docker run -d ubuntudocker ps列出当前正在运行的容器docker psdocker ps -a列出所有容器docker ps -a3、容器操作获取镜像如果本地没有所需要的镜像,可以使用 "docker pull" 命令从Docker Hub上下载[root@lavm-5wutyiasaf ~]# docker pull ubuntu:22.04 22.04: Pulling from library/ubuntu 89dc6ea4eae2: Pull complete Digest: sha256:01a3ee0b5e413cefaaffc6abe68c9c37879ae3cced56a8e088b1649e5b269eee Status: Downloaded newer image for ubuntu:22.04 docker.io/library/ubuntu:22.04 [root@lavm-5wutyiasaf ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 22.04 b103ac8bf22e 12 days ago 77.9MB启动容器使用ubuntu启动一个交互式容器[root@lavm-5wutyiasaf ~]# docker run -it ubuntu:22.04 /bin/bash root@3f6a11edb0e6:/# root@3f6a11edb0e6:/# 参数说明-i: 交互式操作-t:终端/bin/bash:容器启动后执行的命令后台运行使用-d参数让容器在后台运行[root@lavm-5wutyiasaf ~]# docker run -d --name test-ubuntu ubuntu:22.04 /bin/bash fcbc5cf91f3b33f2c3a05ee55d051227ed9f230834e216f9896aa7dbb57347bf进入容器有两种方式可以进入容器使用 docker attach 进入容器(不推荐)[root@lavm-5wutyiasaf ~]# docker attach 3f6a11edb0e6 root@3f6a11edb0e6:/# root@3f6a11edb0e6:/#注意:使用attach命令退出容器时,容器会停止运行。使用 docker exec 进入容器(推荐)[root@lavm-5wutyiasaf ~]# docker exec -it b76ed162fe12 /bin/bash root@b76ed162fe12:/# root@b76ed162fe12:/# 注意:使用exec命令推出容器时,容器不会停止运行,所以推荐此方法。导入和导出容器# 导出容器 [root@lavm-5wutyiasaf ~]# docker export 129077e4abb4 > ubuntu.22.04.tar [root@lavm-5wutyiasaf ~]# ls anaconda-ks.cfg install_panel.sh original-ks.cfg ubuntu.22.04.tar # 导入容器 [root@lavm-5wutyiasaf ~]# docker import ubuntu.22.04.tar test/ubuntu:v1 sha256:906851c5bf30575863fe4f249da96512eb71a3975c03922fba3baa44530ab884 [root@lavm-5wutyiasaf ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/ubuntu v1 906851c5bf30 5 seconds ago 77.9MB # 或者也可以这么导入 [root@lavm-5wutyiasaf ~]# cat ubuntu.22.04.tar | docker import - test/ubuntu:v2 sha256:3e987db64805f8dc339715d3ab86fbb5292b20a6d86d54bf36aab37110581035 [root@lavm-5wutyiasaf ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/ubuntu v2 3e987db64805 7 seconds ago 77.9MB test/ubuntu v1 906851c5bf30 About a minute ago 77.9MB ubuntu 22.04 b103ac8bf22e 12 days ago 77.9MB运行web应用以下示例展示如何运行一个Web应用# 拉取镜像 [root@lavm-5wutyiasaf ~]# docker pull nginx:latest latest: Pulling from library/nginx dad67da3f26b: Pull complete 3b00567da964: Pull complete 56b81cfa547d: Pull complete 1bc5dc8b475d: Pull complete 979e6233a40a: Pull complete d2a7ba8dbfee: Pull complete 32e44235e1d5: Pull complete Digest: sha256:6784fb0834aa7dbbe12e3d7471e69c290df3e6ba810dc38b34ae33d3c1c05f7d Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest # 运行容器 [root@lavm-5wutyiasaf ~]# docker run -d -p 8080:8080 nginx:latest 6f8cf788e20cb223c286fd73bb794c590a112ffcbf485e6320ba8159b00ac0dc [root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6f8cf788e20c nginx:latest "/docker-entrypoint.…" 9 seconds ago Up 7 seconds 80/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp laughing_rubin参数说明-P:随机映射端口。-p 8080:8080:指定端口映射。将容器的8080端口映射到主机的8080端口。验证是否可以正常访问[root@lavm-5wutyiasaf ~]# curl http://localhost:8080 curl: (56) Recv failure: Connection reset by peer # 这里提示报错细想一下是因为什么?排错nginx的默认端口是80,而我却把它的8080端口映射出来了。好,有了思路我们现在来解决,有两种方式:1、把刚才创建的容器删掉重建,重新映射80端口,这里不细讲。2、进入容器把nginx的默认端口80给他修改为8080,再重启容器里的nginx即可(这里重启的是容器里的nginx,可不是nginx这个容器哈)。# 顺便复习下怎么进入容器 [root@lavm-5wutyiasaf ~]# docker exec -it 6f8cf788e20c /bin/bash root@6f8cf788e20c:/# # 找到nginx的配置文件 root@6f8cf788e20c:/# cd /etc/nginx/conf.d/ root@6f8cf788e20c:/etc/nginx/conf.d# ls default.conf # 修改nginx的默认端口,容器里没有vi的命令,所有我们用sed来替换。注意listen和80中间有多少个空格,替换的时候看清楚。 root@6f8cf788e20c:/etc/nginx/conf.d# cat default.conf |grep listen listen 80; listen [::]:80; # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 root@6f8cf788e20c:/etc/nginx/conf.d# sed -i 's/listen 80;/listen 8080;/' default.conf root@6f8cf788e20c:/etc/nginx/conf.d# cat default.conf |grep listen listen 8080; listen [::]:80; # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # 上面看到了端口已经修改完成,现在重启nginx服务 root@6f8cf788e20c:/etc/nginx/conf.d# nginx -t # 自检配置文件是否ok nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful root@6f8cf788e20c:/etc/nginx/conf.d# nginx -s reload # 重启nginx 2025/06/13 09:59:33 [notice] 127#127: signal process started # 验证nginx是否可正常访问 [root@lavm-5wutyiasaf ~]# curl http://localhost:8080 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>4、常见问题权限问题不足的问题执行docker命令时出现权限不足错误Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock解决方法1:使用sudo再docker命令前加上sudo提权。解决方法2:将用户添加到用户组sudo groupadd docker # 添加 docker 用户组 sudo gpasswd -a $USER docker # 将当前用户加入到 docker 用户组 newgrp docker # 更新用户组 docker ps # 测试 docker 命令
2025年06月13日
1 阅读
0 评论
0 点赞
2025-06-11
Hello World
1、运行一个容器:Hello World运行一个简单的容器,输出“Hello World”[root@lavm-5wutyiasaf ~]# docker run ubuntu /bin/echo "Hello World" Hello World命令参数说明docker:Docker的二进制执行文件run:与前边的docker组合运行一个容器ubuntu:正常是“ubuntu:版本号”指定要运行的容器及版本,如果本地不存在的话会从Docker hub上下载/bin/echo "Hello World":在容器中要执行的命令命令执行流程Docker 客户端联系 Docker 守护进程Docker 守护进程检查本地是否有 ubuntu:15.10 镜像,如果没有则从 Docker Hub 下载Docker 守护进程基于该镜像创建新的容器Docker 守护进程分配一个文件系统给容器,并在镜像层外挂载一个读写层Docker 守护进程创建网络接口,连接容器到默认网络Docker 守护进程设置 IP 地址,从池中分配一个 IP 给容器Docker 守护进程在容器中执行 /bin/echo "Hello world" 命令Docker 守护进程将命令的输出流回应给 Docker 客户端,客户端将输出发送给用户终端2、运行交互式容器通过Docker的“-i”和“-t”参数,我们可以建立一个具有交互能力的容器,可以像使用传统虚拟机一样使用容器。[root@lavm-5wutyiasaf ~]# docker run -i -t ubuntu:22.04 /bin/bash root@07730f76c2e7:/# root@07730f76c2e7:/# 参数说明-i:在新容器内指定一个伪终端或者终端-t:允许你对容器内的标准输入(STDIN)进项交互/bin/bash:在容器内启动bash shell运行后,将进入容器的bash终端,提示符类似于:root@07730f76c2e7:/#在容器内执行命令现在可以在容器里执行各种命令,就像在linux系统中一样##查看容器版本信息 root@07730f76c2e7:/# cat /etc/o opt/ os-release root@07730f76c2e7:/# cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.5 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.5 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy ##查看容器主机名 root@07730f76c2e7:/# hostname 07730f76c2e7 ##查看容器进程 root@07730f76c2e7:/# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 4612 2400 pts/0 Ss 09:08 0:00 /bin/bash root 12 0.0 0.0 7048 1448 pts/0 R+ 09:18 0:00 ps auxroot@a94ce49601e1:/# ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var root@a94ce49601e1:/# echo "Hello World" > /tmp/test.txt root@a94ce49601e1:/# cat /tmp/test.txt Hello World##安装ip和ifconfig命令 root@a94ce49601e1:/# apt update root@a94ce49601e1:/# apt install net-tools root@a94ce49601e1:/# apt install iproute2 ##ip a查询 root@a94ce49601e1:/# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever ##ifconfig查询 root@a94ce49601e1:/# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 22069 bytes 42495772 (42.4 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 18376 bytes 1447657 (1.4 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0退出容器可以使用“exit”命令退出,也可以使用快捷键“Ctrl + D”root@07730f76c2e7:~# exit exit [root@lavm-5wutyiasaf ~]# 容器退出后会停止运行,但不会删除,可以通过“docker ps -a”查到所有容器,包括已经停止的容器。[root@lavm-5wutyiasaf ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a94ce49601e1 ubuntu:22.04 "/bin/bash" 12 minutes ago Exited (0) 10 seconds ago heuristic_carson 07730f76c2e7 ubuntu:22.04 "/bin/bash" 35 minutes ago Exited (0) 16 minutes ago bold_nightingale 1b4dbb14ddd0 ubuntu "/bin/echo 'Hello Wo…" 59 minutes ago Exited (0) 59 minutes ago blissful_gates 5fd6f804e8f7 ubuntu "/bin/echo 'Hello Wo…" About an hour ago Exited (0) About an hour ago strange_williamson 66c9c7e39342 hello-world "/hello" 6 hours ago Exited (0) 6 hours ago xenodochial_boyd3、后台运行容器实际运用中,我们需要让容器在后台运行。使用“-d”参数可以让容器在后台运行。[root@lavm-5wutyiasaf ~]# docker run -d ubuntu:22.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 2d8afc1c2b3d8a26e243a823c4cb5511c301d1dc5a2f07c4950d5d278cc44c11参数说明-d:让容器再后台运行/bin/sh -c “COMMAND”:在容器中执行shell命令while true ;do ... done:创建一个循环,示例中是每秒输出一次“hello world“运行后容器会返回一个容器ID,像这样2d8afc1c2b3d8a26e243a823c4cb5511c301d1dc5a2f07c4950d5d278cc44c11容器管理使用docker ps命令查看运行中的所有容器[root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d8afc1c2b3d ubuntu:22.04 "/bin/sh -c 'while t…" 16 hours ago Up 16 hours inspiring_goodalldocker ps输出说明CONTAINER ID:容器的唯一标识符IMAGE:使用的镜像及版本COMMAND:启动容器时运行的命令CREATED:容器的创建时间STATUS:容器的当前状态PORTS:容器的端口映射信息NAMES:容器的名称(如果没有指定,Docker会自动分配一个随机名称)容器状态说明created:已创建但未启动restarting:重启中running 或 up:运行中removing:迁移中paused:暂停中exited:已停止dead:已死亡(无法启动)查看容器日志通过容器ID查看日志[root@lavm-5wutyiasaf ~]# docker logs 2d8afc1c2b3d hello world hello world hello world hello world hello world ......(持续输出)通过容器名称查看日志[root@lavm-5wutyiasaf ~]# docker logs inspiring_goodall hello world hello world hello world hello world hello world ......(持续输出)实时查看日志(类似tail -f)[root@lavm-5wutyiasaf ~]# docker logs -f inspiring_goodall hello world hello world hello world hello world hello world ......(持续输出)查看最近的5条日志[root@lavm-5wutyiasaf ~]# docker logs --tail 5 inspiring_goodall hello world hello world hello world hello world hello world停止容器使用 docker stop 命令停止容器通过ID停止容器[root@lavm-5wutyiasaf ~]# docker stop 2d8afc1c2b3d 2d8afc1c2b3d通过容器名称停止容器[root@lavm-5wutyiasaf ~]# docker stop exciting_rhodes exciting_rhodes4、命名容器默认情况下,Docker会为每个容器分配一个随机名称。实际应用中为了方便管理,会为容器自定义一个名称。使用 --name 参数可以为容器指定名称[root@lavm-5wutyiasaf ~]# docker run -d --name hello-ubuntu ubuntu:latest /bin/sh -c "while true; do echo hello ubuntu; sleep 1; done" 889310d2441b54791567ee388a6b3004c31846a369a4afa89ab9592b16cddd78 [root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 889310d2441b ubuntu:latest "/bin/sh -c 'while t…" 47 seconds ago Up 46 seconds hello-ubuntu使用容器名称 hello-ubuntu 来引用容器[root@lavm-5wutyiasaf ~]# docker logs --tail 5 hello-ubuntu hello ubuntu hello ubuntu hello ubuntu hello ubuntu hello ubuntu用容器名称对容器进行操作[root@lavm-5wutyiasaf ~]# docker stop hello-ubuntu hello-ubuntu [root@lavm-5wutyiasaf ~]# docker start hello-ubuntu hello-ubuntu [root@lavm-5wutyiasaf ~]# docker restart hello-ubuntu hello-ubuntu注意事项容器名称必须时唯一的。如果尝试创建同名称的容器,Docker会返回错误。容器名称可以包含字母、数字、下划线、点和连字符。容器必须以字母或数字开头。5、容器生命周期管理了解容器的完整生命周期对于管理 Docker 环境至关重要。以下是容器生命周期的主要阶段和相关命令创建容器创建但不启动容器(create)[root@lavm-5wutyiasaf ~]# docker create --name testubuntu ubuntu:22.04 d00fcb048bc627bf227196a2fef01220a5f4757e179fd9a38b41bbd6febe40ee [root@lavm-5wutyiasaf ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d00fcb048bc6 ubuntu:22.04 "/bin/bash" 6 seconds ago Created testubuntu该命令会创建一个容器但不会启动。创建后容器处于“Created”状态。启动容器启动已创建或停止的容器(start)[root@lavm-5wutyiasaf ~]# docker start testubuntu testubuntu该命令会启动一个已创建或已停止的容器。启动后的容器处于一个“running”的状态。暂停和恢复容器暂时冻结容器中的所有进程(pause)[root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 889310d2441b ubuntu:latest "/bin/sh -c 'while t…" 24 hours ago Up 1 second hello-ubuntu [root@lavm-5wutyiasaf ~]# [root@lavm-5wutyiasaf ~]# docker pause hello-ubuntu hello-ubuntu [root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 889310d2441b ubuntu:latest "/bin/sh -c 'while t…" 24 hours ago Up 25 seconds (Paused) hello-ubuntu暂停容器会冻结容器中的所有进程,但不会释放资源。暂停的容器处于“Paused”状态。恢复容器中的所有进程(unpause)[root@lavm-5wutyiasaf ~]# docker unpause hello-ubuntu hello-ubuntu [root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 889310d2441b ubuntu:latest "/bin/sh -c 'while t…" 24 hours ago Up 4 minutes hello-ubuntu停止容器停止容器中所有的进程[root@lavm-5wutyiasaf ~]# docker stop hello-ubuntu hello-ubuntu [root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES这个命令会发送 SIGTERM 信号给容器中的主进程,如果进程在一定时间内(默认 10 秒)没有退出, Docker 会发送 SIGKILL 信号强制终止进程。停止后的容器处于 "exited" 状态。强制停止容器立刻终止容器中的所有进程[root@lavm-5wutyiasaf ~]# docker kill hello-ubuntu hello-ubuntu [root@lavm-5wutyiasaf ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES这个命令会立即发送 SIGKILL 信号给容器中的主进程,强制终止容器。 这可能会导致数据丢失,应该只在容器无法正常停止时使用。删除容器永久的删除容器# 删除已停止的容器 [root@lavm-5wutyiasaf ~]# docker rm testubuntu testubuntu # 强制删除正在运行的容器 [root@lavm-5wutyiasaf ~]# docker rm -f exciting_rhodes exciting_rhodes # 删除所有已停止的容器 [root@lavm-5wutyiasaf ~]# docker rm $(docker ps -aq) 663a5afea5fb b558ad89685f f9363e187612 a94ce49601e1 07730f76c2e7 1b4dbb14ddd0 5fd6f804e8f7 66c9c7e39342 Error response from daemon: cannot remove container "/hello-ubuntu": container is running: stop the container before removing or force remove Error response from daemon: cannot remove container "/angry_gagarin": container is running: stop the container before removing or force remove Error response from daemon: cannot remove container "/inspiring_goodall": container is running: stop the container before removing or force remove # 删除所有已停止的容器 [root@lavm-5wutyiasaf ~]# docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: e11ae3a76f5aec04e00dab569a5fbe6dd0171aca6d547aa34c11531e8becb9c3 2d8afc1c2b3d8a26e243a823c4cb5511c301d1dc5a2f07c4950d5d278cc44c11 Total reclaimed space: 0B [root@lavm-5wutyiasaf ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 889310d2441b ubuntu:latest "/bin/sh -c 'while t…" 25 hours ago Up 3 minutes hello-ubuntu删除容器会永久的丢失器文件系统。如果容器中有未保存的数据,这些数据将丢失。容器状态转换容器状态可以按一下方式转换created-->running:通过“docker start”running-->paused:通过“docker pause”paused-->running:通过“docker unpause”running-->exited:通过“docker stop”或者“docker kill”exited-->running:通过“docker start”任何状态-->删除:通过“docker rm”(运行中的容器需要使用“-f”参数)
2025年06月11日
1 阅读
0 评论
0 点赞
2025-06-08
Docker部署
安装及启动系统工具yum install -y yum-utils添加软件源信息yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装dockeryum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin开启服务service docker start安装校验[root@lavm-5wutyiasaf ~]# docker version Client: Docker Engine - Community Version: 26.1.4 API version: 1.45 Go version: go1.21.11 Git commit: 5650f9b Built: Wed Jun 5 11:32:04 2024 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 26.1.4 API version: 1.45 (minimum version 1.24) Go version: go1.21.11 Git commit: de5c9cf Built: Wed Jun 5 11:31:02 2024 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.33 GitCommit: d2d58213f83a351ca8f528a95fbd145f5654e957 runc: Version: 1.1.12 GitCommit: v1.1.12-0-g51d5e94 docker-init: Version: 0.19.0 GitCommit: de40ad0
2025年06月08日
0 阅读
0 评论
0 点赞