docker的部署及基本用法

news/2024/9/18 13:57:10/ 标签: docker, 容器, linux, 运维, 服务器, 云原生

目录​​​​​​​

docker%20%E4%BB%8B%E7%BB%8D-toc" style="margin-left:0px;">1 docker 介绍

docker%EF%BC%9F-toc" style="margin-left:40px;">1.1 什么是docker

docker%E5%9C%A8%E4%BC%81%E4%B8%9A%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF-toc" style="margin-left:40px;">1.2 docker在企业中的应用场景

docker%E4%B8%8E%E8%99%9A%E6%8B%9F%E5%8C%96%E7%9A%84%E5%AF%B9%E6%AF%94-toc" style="margin-left:40px;">1.3 docker与虚拟化的对比

docker%E7%9A%84%E4%BC%98%E5%8A%BF-toc" style="margin-left:40px;">1.4 docker的优势

1.5 容器工作方式

docker-toc" style="margin-left:0px;">2 部署docker

2.1 配置软件仓库

docker%20%E5%AE%89%E8%A3%85-toc" style="margin-left:40px;">2.2 docker 安装

docker%20%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F%E5%99%A8-toc" style="margin-left:40px;">2.3 配置docker 镜像加速器

2.4 启动服务

2.5 激活内核网络选项(centos7需要的操作)

3 Docker的基本操作

docker%20%E7%9A%84%E9%95%9C%E5%83%8F%E7%AE%A1%E7%90%86-toc" style="margin-left:40px;">3.1 docker 的镜像管理

docker%20search-toc" style="margin-left:80px;">3.1.1 搜索镜像:docker search

docker%20pull-toc" style="margin-left:80px;">3.1.2 拉取镜像:docker pull

docker%20images-toc" style="margin-left:80px;">3.1.3 查看本地的镜像:docker images

docker%20image%20inspect-toc" style="margin-left:80px;">3.1.4 查看镜像信息 :docker image inspect

docker%20image%20save-toc" style="margin-left:80px;">3.1.5 导出镜像:docker image save

docker%20rmi-toc" style="margin-left:80px;">3.1.6 删除镜像:docker rmi

3.1.7 实例:删除镜像重新导入

docker%E8%BF%90%E8%A1%8C%E4%B8%80%E4%BA%9B%E5%B0%8F%E5%9E%8B%E9%A1%B9%E7%9B%AE-toc" style="margin-left:80px;">3.1.8 实例:如何使用docker运行一些小型项目

3.2 容器的常用操作

3.2.1 容器的启动与交互

 3.2.2 查看容器信息

3.2.3 停止和运行容器

3.2.4 容器内容提交

3.2.5 系统文件与容器文件交互

3.2.6 查询容器内部日志


docker%20%E4%BB%8B%E7%BB%8D">1 docker 介绍

docker%EF%BC%9F">1.1 什么是docker

Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术

它具有以下几个重要特点和优势:

1. 轻量级虚拟化

Docker 容器相较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省系统资源。

例如,启动一个 Docker 容器可能只需要几秒钟,而启动一个虚拟机则可能需要几分钟。

2. 一致性

:确保应用程序在不同的环境中(如开发、测试、生产)具有一致的运行表现。

无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题。

3. 可移植性

:可以轻松地将 Docker 容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差

异。

比如,在本地开发的容器可以无缝部署到云服务器上。

4. 高效的资源利用:多个 Docker 容器可以共享主机的操作系统内核,从而更有效地利用系统资

源。

5. 易于部署和扩展:能够快速部署新的应用实例,并且可以根据需求轻松地进行水平扩展。

总之,Docker 极大地简化了应用程序的开发、部署和管理流程,提高了开发效率和运维的便利性。

它在现代软件开发和云计算领域得到了广泛的应用。

docker%E5%9C%A8%E4%BC%81%E4%B8%9A%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF">1.2 docker在企业中的应用场景

  • 在企业中docker作为业务的最小载体而被广泛应用
  • 通过docker企业可以更效率的部署应用并更节省资源

IaaS(Infrastructure as a Service),即基础设施即服务

PaaS 是( Platform as a Service )即指平台即服务
SaaS Software as a Service )软件运营服务是

docker%E4%B8%8E%E8%99%9A%E6%8B%9F%E5%8C%96%E7%9A%84%E5%AF%B9%E6%AF%94">1.3 docker与虚拟化的对比

特性虚拟机Docker 容器
操作系统宿主机上运行虚拟机 OS共享宿主机 OS
存储镜像较大(GB)镜像小(MB)
性能操作系统额外的 cpu、内存消耗几乎无性能损耗
移植性笨重、与虚拟化技术耦合度高轻量、灵活迁移
隔离性完全隔离安全隔离
部署慢、分钟级快速、秒级
运行密度一般几十个单机支持上千容器

docker%E7%9A%84%E4%BC%98%E5%8A%BF">1.4 docker的优势

对于开发人员:Build onceRun anywhere

对于运维人员:Configure onceRun anything

容器技术大大提升了IT人员的幸福指数!

1.5 容器工作方式

docker">2 部署docker

部署第一个容器

2.1 配置软件仓库

官方站点:https://docs.docker.com/

由于一些原因导致官方站点不能直接访问,所以使用清华大学的镜像源

[root@rockynode-1 docker-page]# vim /etc/yum.repos.d/docker-ce.repo 
[docker]
name=docker-ce
baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9.4/x86_64/stable/
gpgcheck=0[root@rockynode-1 docker-page]# yum makecache

docker%20%E5%AE%89%E8%A3%85">2.2 docker 安装

[root@rockynode-1 ~]# yum install docker-ce[root@rockynode-1 ~]# systemctl start docker.service 
[root@rockynode-1 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

docker%20%E9%95%9C%E5%83%8F%E5%8A%A0%E9%80%9F%E5%99%A8">2.3 配置docker 镜像加速器

[root@rockynode-1 ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io","https://gy3ctkgm.mirror.aliyuncs.com"]
}

2.4 启动服务

#编辑docker启动文件,设定其使用iptables的网络设定方式,默认使用nftables
[root@docker ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --iptables=true
]# systemctl enable --now docker
]# docker info

2.5 激活内核网络选项(centos7需要的操作)

#在rhel7中 需要
]# vim /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
]# sysctl --system
]# systemctl restart docker

​​​​​​​

3 Docker的基本操作

docker%20%E7%9A%84%E9%95%9C%E5%83%8F%E7%AE%A1%E7%90%86">3.1 docker 的镜像管理

docker%20search">3.1.1 搜索镜像:docker search

[root@rockynode-1 dockerfile]# docker search nginx
NAME                              DESCRIPTION                                      STARS     OFFICIAL
nginx                             Official build of Nginx.                         20126     [OK]
nginx/nginx-quic-qns              NGINX QUIC interop                               1         
nginx/nginx-ingress               NGINX and  NGINX Plus Ingress Controllers fo…   94        
nginx/nginx-ingress-operator      NGINX Ingress Operator for NGINX and NGINX P…   2         
nginx/nginx-prometheus-exporter   NGINX Prometheus Exporter for NGINX and NGIN…   43        
nginx/unit                        This repository is retired, use the Docker o…   63        

docker%20pull">3.1.2 拉取镜像:docker pull

[root@rockynode-1 ~]# docker pull nginx:1.26-alpine
1.26-alpine: Pulling from library/nginx
c6a83fedfae6: Pull complete 
e84a595b509f: Pull complete 
49fbf0520b78: Pull complete 
8e479110e8a8: Pull complete 
ecc9b66af851: Pull complete 
09732b09eef5: Pull complete 
2a633cf0ba84: Pull complete 
128ae6f0c7f5: Pull complete 
Digest: sha256:d4d72ee8e6d028c5ad939454164d3645be2d38afb5c352277926a48e24abf4fa
Status: Downloaded newer image for nginx:1.26-alpine
docker.io/library/nginx:1.26-alpine

docker%20images">3.1.3 查看本地的镜像:docker images

alpine 版本: nginx 镜像的最小安装发型版本

docker%20image%20inspect">3.1.4 查看镜像信息 :docker image inspect

[root@rockynode-1 ~]# docker image inspect nginx:1.26-alpine 
[{"Id": "sha256:9703b2608a982bc40633a891858a59ab10fc1c96156056e888d5754fb427d6ed","RepoTags": ["nginx:1.26-alpine"],"RepoDigests": ["nginx@sha256:d4d72ee8e6d028c5ad939454164d3645be2d38afb5c352277926a48e24abf4fa"],"Parent": "","Comment": "buildkit.dockerfile.v0","Created": "2024-08-14T23:51:24Z","DockerVersion": "","Author": "","Config": {"Hostname": "","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"80/tcp": {}},"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": ["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.26.2","PKG_RELEASE=1","DYNPKG_RELEASE=2","NJS_VERSION=0.8.5","NJS_RELEASE=1"],"Cmd": ["nginx","-g","daemon off;"],"ArgsEscaped": true,"Image": "","Volumes": null,"WorkingDir": "","Entrypoint": ["/docker-entrypoint.sh"],"OnBuild": null,"Labels": {"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"},"StopSignal": "SIGQUIT"},"Architecture": "amd64","Os": "linux","Size": 43255493,"GraphDriver": {"Data": {"LowerDir": "/var/lib/docker/overlay2/a98984e990b4942e4b338854ebb11c66c9f43e0c0543bcf73ee063ebc784f8b1/diff:/var/lib/docker/overlay2/17e91ccae105f802683110be0d219cdbac4e04e13be6294a63b0fa19b0584966/diff:/var/lib/docker/overlay2/9f7a9117632e9a64241301f62cbf3d6dfe853b4bed2b7d11273a7b9b67f7445b/diff:/var/lib/docker/overlay2/0a50c51660edd2cb13954b23ff9c34c9c4605984d90d30804e6255c314b354d4/diff:/var/lib/docker/overlay2/d2b320a241233388287e2e0907c77caace0cb11a64d3616ba30f364fbb764555/diff:/var/lib/docker/overlay2/71fa88d3d2cbc068e34a35ae87c1acde2c759b148b5b964ed200e93dd5f781b6/diff:/var/lib/docker/overlay2/da17fc4ead7cf90a18c9824732d3e9ffacc9a9d07d05a9b1acc29bd77c13839e/diff","MergedDir": "/var/lib/docker/overlay2/4b71bfb93d3acc5b9ef6b252f793bb6c9995a695c0b961c7f8d12fa6fe78c26d/merged","UpperDir": "/var/lib/docker/overlay2/4b71bfb93d3acc5b9ef6b252f793bb6c9995a695c0b961c7f8d12fa6fe78c26d/diff","WorkDir": "/var/lib/docker/overlay2/4b71bfb93d3acc5b9ef6b252f793bb6c9995a695c0b961c7f8d12fa6fe78c26d/work"},"Name": "overlay2"},"RootFS": {"Type": "layers","Layers": ["sha256:78561cef0761903dd2f7d09856150a6d4fb48967a8f113f3e33d79effbf59a07","sha256:56983a0546de1109188cf29c574481a59b137c2de453942c5a11abc2d7854d32","sha256:88b572fefcc60fc85f0ca66174d71a118800c402d3697c4dc6a90dd501730c18","sha256:9405d361c947aa1a6f4561acce59baeedfb5579c4610c361fd6915152c59e9a5","sha256:775da40d81efe5b3dad7d5d34eba42f975e393e487e5819c16458aa7006a13c5","sha256:d1e692cc0d19c3319c0552b598b1dba876db7fd6b987ffb275d2a97ae79692d3","sha256:06c72c2189d8932874b549a828b91e9306ece19bb97093fa45a0057518bb11aa","sha256:2d40545659420c3ec78f0a0cf1d743f388035e03ccd5b10745b5a190b4ae1cee"]},"Metadata": {"LastTagTime": "0001-01-01T00:00:00Z"}}
]

 

docker%20image%20save">3.1.5 导出镜像:docker image save

[root@rockynode-1 ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  script
[root@rockynode-1 ~]# docker image save nginx:latest -o nginx-latest.tar.gz
[root@rockynode-1 ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg      script
模板  图片  下载  桌面  nginx-latest.tar.gz

docker%20rmi" style="background-color:transparent;">3.1.6 删除镜像:docker rmi

[root@rockynode-1 ~]# docker rmi nginx:latest 

3.1.7 实例:删除镜像重新导入

# 删除镜像
[root@rockynode-1 ~]# docker rmi nginx:latest 
Untagged: nginx:latest
Deleted: sha256:5ef79149e0ec84a7a9f9284c3f91aa3c20608f8391f5445eabe92ef07dbda03c
Deleted: sha256:aa557aaf0b93b5b9af247beb198be89632444af2d52b37f2b67bdf2227194625
Deleted: sha256:85dee7d6fa4b70eaa6b43b5dede5255b6794fac35d2aa6a80f8590dad223c1a6
Deleted: sha256:9996f8429bfc2f1e10f561e17bdc0c66eb82e30088725fbdc634a774933ba066
Deleted: sha256:d861b1c34411369feaaaf4921018baa607e89f1c393b8ed950f676dd3349b9ff
Deleted: sha256:01b9716819d1d6863f886e1adcd8bb2bf936dcacb16e1750e873bfd8e1667014
Deleted: sha256:8d8c7099ecd8343e6700c1d348211ab159c0eda2a9d318c5cf600a8eb2588f5e
Deleted: sha256:9853575bc4f955c5892dd64187538a6cd02dba6968eba9201854876a7a257034# 导入本地保存的镜像
[root@rockynode-1 ~]# docker load -i /root/nginx-latest.tar.gz 
9853575bc4f9: Loading layer  77.83MB/77.83MB
72db5db515fd: Loading layer    114MB/114MB
8b87c0c66524: Loading layer  3.584kB/3.584kB
ec1a2ca4ac87: Loading layer  4.608kB/4.608kB
55e54df86207: Loading layer   2.56kB/2.56kB
f4f00eaedec7: Loading layer   5.12kB/5.12kB
5f0272c6e96d: Loading layer  7.168kB/7.168kB
Loaded image: nginx:latest# 查看镜像是否本地拉取成功
[root@rockynode-1 ~]# docker images
REPOSITORY           TAG           IMAGE ID       CREATED         SIZE
nginx                1.26-alpine   9703b2608a98   12 days ago     43.3MB
nginx                latest        5ef79149e0ec   12 days ago     188MB
busybox              latest        65ad0d468eb1   15 months ago   4.26MB
timinglee/game2048   latest        19299002fdbe   7 years ago     55.5MB
timinglee/mario      latest        9a35a9e43e8c   8 years ago     198MB

使用 awk 保存所有镜像

首先用awk将现在镜像名与标签给打印出来

~]# docker images | awk 'BEGIN{FS=" "}{if (NR > 1) print $1 ":" $2}'
nginx:1.26-alpine
nginx:latest
busybox:latest
timinglee/game2048:latest
timinglee/mario:latest
~]# docker save `docker images | awk 'BEGIN{FS=" "}{if (NR > 1) print $1 ":" $2}'` -o /root/images.tar.gz

docker删除所有镜像

~]# docker rmi `docker images | awk 'BEGIN{FS=" "}{if (NR > 1) print $1 ":" $2}'` ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

恢复删除的镜像,本地保存的

[root@rockynode-1 ~]# docker load -i /root/images.tar.gz 
011b303988d2: Loading layer   5.05MB/5.05MB
36e9226e74f8: Loading layer  51.46MB/51.46MB
192e9fad2abc: Loading layer  3.584kB/3.584kB
6d7504772167: Loading layer  4.608kB/4.608kB
88fca8ae768a: Loading layer  629.8kB/629.8kB
Loaded image: timinglee/game2048:latest
Loaded image: timinglee/mario:latest
78561cef0761: Loading layer  8.082MB/8.082MB
56983a0546de: Loading layer  4.447MB/4.447MB
88b572fefcc6: Loading layer  3.584kB/3.584kB
9405d361c947: Loading layer  4.608kB/4.608kB
775da40d81ef: Loading layer   2.56kB/2.56kB
d1e692cc0d19: Loading layer   5.12kB/5.12kB
06c72c2189d8: Loading layer  7.168kB/7.168kB
2d4054565942: Loading layer  32.09MB/32.09MB
Loaded image: nginx:1.26-alpine
9853575bc4f9: Loading layer  77.83MB/77.83MB
72db5db515fd: Loading layer    114MB/114MB
8b87c0c66524: Loading layer  3.584kB/3.584kB
ec1a2ca4ac87: Loading layer  4.608kB/4.608kB
55e54df86207: Loading layer   2.56kB/2.56kB
f4f00eaedec7: Loading layer   5.12kB/5.12kB
5f0272c6e96d: Loading layer  7.168kB/7.168kB
Loaded image: nginx:latest
d51af96cf93e: Loading layer  4.495MB/4.495MB
Loaded image: busybox:latest[root@rockynode-1 ~]# docker images 
REPOSITORY           TAG           IMAGE ID       CREATED         SIZE
nginx                1.26-alpine   9703b2608a98   12 days ago     43.3MB
nginx                latest        5ef79149e0ec   12 days ago     188MB
busybox              latest        65ad0d468eb1   15 months ago   4.26MB
timinglee/game2048   latest        19299002fdbe   7 years ago     55.5MB
timinglee/mario      latest        9a35a9e43e8c   8 years ago     198MB

docker%E8%BF%90%E8%A1%8C%E4%B8%80%E4%BA%9B%E5%B0%8F%E5%9E%8B%E9%A1%B9%E7%9B%AE">3.1.8 实例:如何使用docker运行一些小型项目

运行docker

 docker-page]# docker run -d --rm --name webserver -p 80:80 nginx
e681dae38196e04049034a7881ab3f53000fb4a54f6cf335233d366b7b8b9ab4
[root@rockynode-1 docker-page]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED         STATUS         PORTS                               NAMES
e681dae38196   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   webserver

删除容器

[root@rockynode-1 ~]# docker rm -f webserver 
webserver

使用第二个镜像开启一个容器 

[root@rockynode-1 ~]# docker run -d --rm --name game1 -p 80:80 timinglee/game2048
7cccfa818ef3fda7342b1a05e14b554e01b41f42c094c671085beb8563d6ee3e[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE                COMMAND                   CREATED              STATUS              PORTS                                        NAMES
7cccfa818ef3   timinglee/game2048   "/bin/sh -c 'sed -i …"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   game1

实现效果 

停止自动删除 因为运行时指定 了--rm,停止自动删除 

[root@rockynode-1 ~]# docker stop game1 
game1

运行第三个容器:马里奥 

[root@rockynode-1 ~]# docker run --rm --name game2 -p 80:8080 timinglee/mario[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE                    COMMAND                   CREATED         STATUS         PORTS                                   NAMES
e381a2de686e   timinglee/mario:latest   "python3 -m http.ser…"   5 seconds ago   Up 5 seconds   0.0.0.0:80->8080/tcp, :::80->8080/tcp   game2

浏览器打开可以玩了 

3.2 容器的常用操作

3.2.1 容器的启动与交互

[root@rockynode-1 dockerfile]# docker run -it --name test busybox:latest
# ctrl+pq 可以不停止容器退出 
/ # [root@rockynode-1 dockerfile]# 

 3.2.2 查看容器信息

[root@rockynode-1 dockerfile]# docker ps -a 
CONTAINER ID   IMAGE            COMMAND   CREATED          STATUS          PORTS     NAMES
3df692c10553   busybox:latest   "sh"      21 seconds ago   Up 21 seconds             test
[root@rockynode-1 dockerfile]# docker ps 
CONTAINER ID   IMAGE            COMMAND   CREATED          STATUS          PORTS     NAMES
3df692c10553   busybox:latest   "sh"      28 seconds ago   Up 27 seconds             test
[root@rockynode-1 dockerfile]# docker exec -it test sh
[root@rockynode-1 docker-page]# docker load -i centos-7.tar.gz 
174f56854903: Loading layer  211.7MB/211.7MB
Loaded image: centos:7
[root@rockynode-1 docker-page]# docker images 
REPOSITORY           TAG           IMAGE ID       CREATED             SIZE
busybox              v1            acaead738246   About an hour ago   4.26MB
nginx                1.26-alpine   9703b2608a98   12 days ago         43.3MB
nginx                latest        5ef79149e0ec   12 days ago         188MB
busybox              latest        65ad0d468eb1   15 months ago       4.26MB
centos               7             eeb6ee3f44bd   2 years ago         204MB
timinglee/game2048   latest        19299002fdbe   7 years ago         55.5MB
timinglee/mario      latest        9a35a9e43e8c   8 years ago         198MB
[root@rockynode-1 docker-page]# docker run -it --name centos7 centos:7[root@a1f0476a59ca /]# #进入到容器中,按<ctrl>+<d>退出并停止容器,#按<ctrl>+<pq>退出但不停止容器[root@rockynode-1 docker-page]# docker ps 
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
a1f0476a59ca   centos:7   "/bin/bash"   3 minutes ago   Up 3 minutes             centos7# 重新进入容器
[root@rockynode-1 docker-page]# docker attach centos7 
[root@a1f0476a59ca /]# 

 

-d                      # 后台运行
-i                       # 交互式运行
-t                       # 打开一个终端
--name             # 指定容器名称
-p                      # 端口映射 -p 80 8080 容器 8080 端口映射到本机 80 端口
--rm                  # 容器停止自动删除容器
--network          # 指定容器使用的网络
[root@rockynode-1 docker-page]# docker exec -i -t centos7 ls
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
# 查看当前运行容器
[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
a1f0476a59ca   centos:7   "/bin/bash"   10 minutes ago   Up 4 minutes             centos7# 查看所有容器
[root@rockynode-1 ~]# docker ps -a 
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
a1f0476a59ca   centos:7   "/bin/bash"   10 minutes ago   Up 4 minutes             centos7# 查看容器详细信息
[root@rockynode-1 ~]# docker inspect centos7 
[{"Id": "a1f0476a59cafbc809e21e82ddbdd1d751c90700f8def848d5592d6760ff2402","Created": "2024-08-27T11:53:58.074417126Z","Path": "/bin/bash","Args": [],"State": {"Status": "running","Running": true,"Paused": false,"Restarting": false,"OOMKilled": false,"Dead": false,"Pid": 12006,"ExitCode": 0,"Error": "","StartedAt": "2024-08-27T11:59:38.632754486Z","FinishedAt": "2024-08-27T11:59:20.625915334Z"},################################# 省略 ##################################

3.2.3 停止和运行容器

[root@rockynode-1 ~] docker stop centos7 #停止容器
[root@rockynode-1 ~] docker kill centos7 #杀死容器,可以使用信号
[root@rockynode-1 ~] docker start centos7 #开启停止的容器

3.2.4 删除容器 ​​​​​​​

[root@rockynode-1 ~]# docker run -it --name centos7_2 centos:7 
[root@258651663ef8 /]# [root@rockynode-1 ~]# 
[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
258651663ef8   centos:7   "/bin/bash"   10 seconds ago   Up 10 seconds             centos7_2
a1f0476a59ca   centos:7   "/bin/bash"   16 minutes ago   Up 10 minutes             centos7
[root@rockynode-1 ~]# docker stop centos7
centos7
[root@rockynode-1 ~]# docker stop centos7_2 
centos7_2
[root@rockynode-1 ~] docker container prune -f  # 删除所有停止的容器
Deleted Containers:
258651663ef8c66b76581b1a4e99b453990ee29d26eabae10f2b98caf6d491bd
a1f0476a59cafbc809e21e82ddbdd1d751c90700f8def848d5592d6760ff2402Total reclaimed space: 24.09MB
[root@rockynode-1 ~]# docker ps -a 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@rockynode-1 ~]# 

3.2.4 容器内容提交

在平常我们不可能只是只保存容器中,那样对数据是及其不安全的,一般都是创建容器然后保存之后再生成新的生成镜像。

将一层可读变为两层可读 :

而保存生成镜像就需要用到 commit -m  --> 就是为原有只读的镜像多添加了一层可写层并保存这一层可写层将他做成一个两层的可读的镜像

dockerfile]# docker run --name test -it busybox:latest 
/ # exit
dockerfile]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMESdockerfile]# docker start test dockerfile]# docker ps 
CONTAINER ID   IMAGE            COMMAND   CREATED          STATUS         PORTS     NAMES
4eac8f46f01d   busybox:latest   "sh"      22 seconds ago   Up 3 seconds             testdockerfile]# docker exec -it test sh
/ # touch shuyanfile
/ # ls
bin         etc         lib         proc        shuyanfile  tmp         var
dev         home        lib64       root        sys         usr
/ # exitdockerfile]# docker ps 
CONTAINER ID   IMAGE            COMMAND   CREATED              STATUS          PORTS     NAMES
4eac8f46f01d   busybox:latest   "sh"      About a minute ago   Up 47 seconds             testdockerfile]# docker commit -m "add file shuyanfile" test busybox:v1
sha256:acaead738246c8108e4e88fdc2385966249e26dbc31e9f1402240877c40d3d5edockerfile]# docker images 
REPOSITORY           TAG           IMAGE ID       CREATED          SIZE
busybox              v1            acaead738246   19 seconds ago   4.26MB
nginx                1.26-alpine   9703b2608a98   12 days ago      43.3MB
nginx                latest        5ef79149e0ec   12 days ago      188MB
busybox              latest        65ad0d468eb1   15 months ago    4.26MB
timinglee/game2048   latest        19299002fdbe   7 years ago      55.5MB
timinglee/mario      latest        9a35a9e43e8c   8 years ago      198MB
dockerfile]# docker ps 
CONTAINER ID   IMAGE            COMMAND   CREATED         STATUS         PORTS     NAMES
4eac8f46f01d   busybox:latest   "sh"      4 minutes ago   Up 3 minutes             test# 删除由busybox:latest 只读层生成的可写容器
dockerfile]# docker rm -f test 
testdockerfile]# docker run -it --rm --name test busybox:v1 
/ # ls
bin         etc         lib         proc        shuyanfile  tmp         var
dev         home        lib64       root        sys         usr
/ # 运行了一个新的 busybox:latest 容器,
并命名为 test,
同时使用了 -it 选项来开启一个交互式的 shell,
以及 --rm 选项来确保容器在退出后会被自动删除。

3.2.5 系统文件与容器文件交互

[root@rockynode-1 ~]# docker run -it --name=centos7 centos:7 
[root@bf0dce166d86 /]# exit
exit
[root@rockynode-1 ~]# docker start centos7 
centos7
[root@rockynode-1 ~]# docker ps 
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS         PORTS     NAMES
bf0dce166d86   centos:7   "/bin/bash"   14 seconds ago   Up 4 seconds             centos7
[root@rockynode-1 ~]# docker exec -it centos7 ls 
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@rockynode-1 ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  images.tar.gz        script
模板  图片  下载  桌面  dockerfile       nginx-latest.tar.gz[root@rockynode-1 ~]# ls
公共  视频  文档  音乐  anaconda-ks.cfg  images.tar.gz        script
模板  图片  下载  桌面  dockerfile       nginx-latest.tar.gz[root@rockynode-1 ~] docker cp anaconda-ks.cfg centos7:/mnt  #复制文件到容器中
Successfully copied 2.56kB to centos7:/mnt[root@rockynode-1 ~] docker exec -it centos7 ls /mnt         #查看容器是否收到
anaconda-ks.cfg

3.2.6 查询容器内部日志

[root@rockynode-1 ~]# docker logs nginx_2 


http://www.ppmy.cn/news/1516756.html

相关文章

每日刷力扣SQL题(五)

1164.指定日期的产品价格 一、方法&#xff1a;使用left join 和 ifnull 思路 本题的关键点在找到 2019-08-16 前所有有改动的产品及其最新价格和没有没有修改过价格的产品。 我们可以先找到所有的产品&#xff0c;再找到所有 2019-08-16 前有修改的产品和他们最新的价…

Vue3 pinia

1.简介 集中式状态&#xff08;数据&#xff09;管理 和vueX一样 2.安装pinia npm i pinia //引入 createApp用于创建应用 import {createApp} from vue; //引入 App 根组件 import App from ./App.vue;//引入pinia import {createPinia} from pinia;//创建一个应用 const…

PyTorch构建模型网络结构的6种方式

PyTorch提供了多种方式来构建模型的网络结构&#xff0c;我尝试总结一下&#xff0c;有如下6种常见方式&#xff08;可能还有我没注意到的&#xff0c;欢迎补充&#xff09;。我们平时写代码并不一定需要掌握全部方式&#xff0c;但是多了解一些&#xff0c;对于阅读理解别人的…

服务器主动推送的方法

目录 1.长轮询&#xff08;Long Polling&#xff09;2.WebSockets3.Server-Sent Events&#xff08;SSE&#xff09;4.HTTP2 Server Push 服务器如何主动推送数据 在传统的网络通信中&#xff0c;客户端&#xff08;如浏览器&#xff09;通常需要通过向服务器发起请求来获取数据…

快速判断一个项目是Spring MVC框架还是Spring Boot框架

1. 查看项目的启动类 Spring Boot: 通常有一个主类&#xff0c;包含 SpringBootApplication 注解&#xff0c;并且有一个 main 方法来启动应用程序。 SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Appli…

作业训练三编程题13. 导弹防御系统

【问题描述】 某国为了防御敌国的导弹袭击&#xff0c;开发出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。某天&#xff0c;雷达捕捉到敌国的导弹来袭&#xf…

python脚本请求数量达到上限,http请求重试问题例子解析

在使用Python的requests库进行HTTP请求时&#xff0c;可能会遇到请求数量达到上限&#xff0c;导致Max retries exceeded with URL的错误。这通常发生在网络连接不稳定、服务器限制请求次数、或请求参数设置错误的情况下。以下是一些解决该问题的策略&#xff1a; 增加重试次数…

并发服务器开发基础

一、服务器模型 1. 单循环服务器&#xff1a; 单循环服务器在同一时刻只能处理一个客户端的请求。由于其结构简单&#xff0c;适合低负载的场景&#xff0c;但在并发请求增加时可能导致性能问题。 2. 并发服务器模型&#xff1a; 并发服务器可以同时响应多个客户端…

本地环境注入jupyter:无法在jupyter选择已经创建的conda环境?快来看下解决办法(jupyter notebook选择已创建环境)

1、WinR打开本机cmd命令行 2、运行 conda activate 本地已创建的环境名称 3、运行 conda install ipykernel 4、运行 python -m ipykernel install --user --name 本地环境名称 --display-name "在jupyter上显示的环境名称" 就可以在jupyter notebook中看到环…

谷粒商城实战笔记-250-商城业务-消息队列-RabbitMQ安装-Docker

一&#xff0c;docker安装RabbitMq RabbitMQ 是一个开源的消息代理软件&#xff0c;广泛用于实现异步通信和应用程序解耦。 使用 Docker 容器化技术可以简化 RabbitMQ 的安装和部署过程。 以下是使用 Docker 安装 RabbitMQ 的详细步骤。 步骤 1: 安装 Docker 如果您的系统…

如何解决:Failed to start jenkins.service: Unit not found.

当在 CentOS 上尝试启动 Jenkins 服务时&#xff0c;出现 Failed to start jenkins.service: Unit not found 的错误&#xff0c;这通常表示 Jenkins 服务未安装或未正确配置。请按照以下步骤进行排查和解决&#xff1a; 解决步骤 检查 Jenkins 是否已安装&#xff1a; 确认 J…

如何使用ssm实现旅游网站的设计与实现

TOC ssm150旅游网站的设计与实现jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

ComfyUI 常用的节点

总的来说&#xff0c;如果可以的话 最佳实践是直接访问每个节点仓库&#xff0c;仔细阅读作者提供的文档和说明。然后&#xff0c;手动执行 git clone 来获取仓库的代码。 接着&#xff0c;你可以通过手动执行 pip install -r requirements.txt 来安装每个项目的依赖。这种方法…

【Linux】第十八章 Reactor模式

文章目录 Reactor模式epoll ET服务器&#xff08;Reactor模式&#xff09;设计思路Epoller.hppSock.hppProtocol.hppService.hppTcpServer.hpp-重点Connection类TcpServer类服务器框架TcpServer构造AddConnection函数SetNonBlock 函数Accepter函数IsExists函数TcpRecver函数Tcp…

[oeasy]python031_[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics

[趣味拓展]unix起源_Ken_Tompson_Ritchie_multics &#x1f94b; 回忆上次内容 上次 动态设置了 断点 断点 可以把代码 切成一段一段的可以 更快地调试 调试的目的 是 去除 bug 别害怕 bug 一步步 总能找到 bug这 就是 程序员基本功 调试 debug 在bug出现的时候 甚至…

docker-harbor私有仓库部署和管理

harbor&#xff1a;开源的企业级的docker仓库软件 仓库&#xff1a;私有仓库 公有仓库 &#xff08;公司内部一般都是私有仓库&#xff09; habor 是有图形化的&#xff0c;页面UI展示的一个工具&#xff0c;操作起来很直观。 harbor每个组件都是由容器构建的&#xff0c;所…

高效的数据恢复软件介绍给大家!

数据丢失可太烦人了&#xff0c;在工作中我们经常会遇到数据丢失的情况&#xff0c;那么你知道数据丢失怎么找回来吗&#xff1f;当然找的回来啦&#xff01;需要用上高效且有用的数据恢复工具。那么&#xff0c;今天就要给大家介绍两个好用的数据恢复工具&#xff0c;可以将您…

5个常见问答 | 1+X证书《大数据应用开发(Python)》

1、 1X大数据应用开发&#xff08;Python&#xff09;哪些人群可以考&#xff1f; 全日制在读的中高职学校、应用型本科、本科层次职业教育试点学校院校的学生&#xff0c;有意向从事与证书相关岗位的社会人士都可考取该证书。 2、1X大数据应用开发&#xff08;Python&am…

网络udp及ipc内存共享

大字符串找小字符串 调试 1. 信号处理函数注册&#xff1a;•一旦使用 signal 函数注册了信号处理函数&#xff0c;该函数就会一直有效&#xff0c;直到程序结束或者显式地取消注册。2. 注册多次的影响&#xff1a;•如果多次注册同一信号的处理函数&#xff0c;最后一次注册的…

【手写数据库内核组件】0303 数据缓存池(二) 缓存块使用前需要固定,缓存加载与无效,无锁的替换算法

0303 数据缓存池(二) ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 0303 数据缓存池(二)一、概述 二、缓存块操作原理 2.1 缓存块的读写访问 2.2 无…