i53470怎么运行5个虚拟机,i5最大开多少个虚拟机

首页 > 经验 > 作者:YD1662022-10-29 03:08:26

写在前面

你拥有青春的时候,就要感受它,不要虚掷你的黄金时代,不要去倾听枯燥乏味的东西,不要设法挽留无望的失败,不要把你的生命献给无知,平庸和低俗。 ------王尔德


一、docker 原理docker是什么?

Docker 是完整的一套容器管理系统,所以想要搞懂 Docker 的概念,我们必须先从容器开始说
起。什么是容器?

容器原理

容器技术的核心,由以下几个内核技术组成:

Linux 的 NameSpacedocker 的特性docker 的优缺点docker 的特点
二、docker 安装部署docker安装安装条件

查看linux系统的内核版本,【uname -r】也可以

源配置docker安装

[root@liruilong ~]# systemctl daemon-reload [root@liruilong ~]# systemctl restart docker


三、获取镜像镜像、容器、仓库什么是镜像

镜像是启动容器的核心,在Docker 中容器是基于镜像启动的,镜像采用分层设计,使用COW技术

容器使用镜像启动

i53470怎么运行5个虚拟机,i5最大开多少个虚拟机(1)

镜像是怎么来的?

镜像可以从官方镜像仓库下载,也可以自己制作

获取镜像查找镜像:docker search 关键字 docker search jdk

i53470怎么运行5个虚拟机,i5最大开多少个虚拟机(2)

下载镜像docker pull 镜像名称:标签 :docker pull docker.io/busybox镜像的备份与恢复备份镜像 (导出镜像):docker save 镜像名称:镜像标签 -o 备份文件夹(tar格式)

[root@kube-node1 ~]$ docker save docker.io/busybox:latest -o /root/busybox.tar

[root@kube-node1 ~]$ scp /root/busybox.tar 192.168.1.22:/root/ 恢复镜像(导入镜像)docker load -i 备份文件名称

docker load -i busybox.tar 四、第一个容器运行容器docker run 命令docker run -参数 镜像名称:镜像标签 启动命令

五、docker 镜像管理镜像管理命令六、docker 容器管理常用容器管理命令七,自定义镜像commit 自定义镜像

自定义镜像原理 :镜像采用分层设计:1,创建读写层 2,修改配置 3,重新打包
使用镜像启动容器,在该容器基础上修改,另存为一个新镜像

############## 创建一个centos的容器,在kube-node1上操作 ############## ##查看所有的镜像 [root@kube-node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox test 6858809bf669 5 weeks ago 1.232 MB docker.io/busybox latest 6858809bf669 5 weeks ago 1.232 MB docker.io/redis latest 82629e941a38 21 months ago 4.98 MB docker.io/nginx latest 42b4762643dc 21 months ago 109.2 MB docker.io/ubuntu latest 20bb25d32758 21 months ago 87.47 MB docker.io/centos latest 76d6bc25b8a5 2 years ago 199.7 MB ##-it 以交互式终端的方式,根据centos镜像启动一个容器 ##/bin/bash 为容器内的命令,容器内存在,才可以使用 [root@kube-node1 ~]# docker run -it docker.io/centos:latest /bin/bashh ################ 容器内安装yum, 在kube-node1上操作 ############## #清除网络yum文件,配置本地yum [root@d76e8f39e026 /]# rm -rf /etc/yum.repos.d/* [root@d76e8f39e026 /]# vi /etc/yum.repos.d/centos7.repo [centos] name=centos7.5 baseurl=http://192.168.1.100/centos-1804 enabled=1 gpgcheck=0 ##清空缓存,重新加载配置 [root@d76e8f39e026 /]# yum clean all [root@d76e8f39e026 /]# yum repolist ........ Determining fastest mirrors centos | 3.6 kB 00:00 (1/2): centos/group_gz | 166 kB 00:00 (2/2): centos/primary_db | 5.9 MB 00:00 repo id repo name status centos centos7.5 9911 repolist: 9911

################ 容器内安装基础工具软件包, 在kube-node1上操作 ############## ##安装基础工具软件包 [root@d76e8f39e026 /]# yum -y install net-tools psmisc iproute vim bashcompletion tree ##清除yum缓存,减小容器大小,用于镜像制作 [root@d76e8f39e026 /]# yum clean all ##退出容器,主机名就是容器的ID号 [root@d76e8f39e026 /]# exit

################# commit自定义镜像,在kube-node1上操作 ############## ##commit 提交容器,生成新的镜像;此ID为容器的ID号 [root@kube-node1 ~]# docker commit d76e8f39e026 myos:latest sha256:10a665c54e587d47756a00058abef86ef6b329b44937aaea34376482c9410878 ##myos镜像,就是新生成的镜像 [root@kube-node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myos latest 10a665c54e58 About a minute ago 317.8 MB ........

############## 验证新的镜像,在kube-node1上操作 ############## ##查看历史镜像,多出一个镜像层 [root@kube-node1 ~]# docker history myos:latest IMAGE CREATED CREATED BY SIZE COMMENT 10a665c54e58 3 minutes ago /bin/bash 118.1 MB ....... ##使用新的镜像生成一个容器,容器的yum已经部署,验证成功 [root@kube-node1 ~]# docker run -it myos:latest /bin/bash [root@5dbc2153d039 /]# yum repolist Loaded plugins: fastestmirror, ovl Loading mirror speeds from cached hostfile repo id repo name status centos centos7.5 9911 repolist: 9911 Dockerfile 自定义镜像

语法

Dockerfile 案例1

配置 yum、安装软件

FROM docker.io/centos:latest RUN rm -f /etc/yum.repos.d/* COPY local.repo /etc/yum.repos.d/local.repo RUN yum install -y bash-completion net-tools iproute psmisc 创建镜像

使用 Dockerfile 工作流程,根据Dockerfile生成新的镜像,build创建新的镜像;-t指定新镜像的名字和标签;. 指定Dockerfile文件所在的目录

########### 获取制作镜像的历史命令,在kube-node1上操作 ############## ##利用myos镜像,创建一个容器,可以查看之前制作镜像的历史命令 [root@kube-node1 ~]# docker run -it myos:latest docker build -t imagename Dockerfile 所在目录 [root@096875f0df8d /]# history 1 rm -rf /etc/yum.repos.d/* 2 vi /etc/yum.repos.d/centos7.repo 3 yum clean all 4 yum repolist 5 yum -y install net-tools psmisc vim iproute vim bash-completiono tree 6 exit 7 history ##exit 退出,并关闭容器 [root@096875f0df8d /]# exit

########## 制作Dockerfile自动创建镜像脚本,在kube-node1上操作 ############## ##创建一个目录,名称任意定义 [root@kube-node1 ~]# mkdir aa ##进入到aa目录下 [root@kube-node1 ~]# cd aa/ ##创建Dockerfile文件,文件名不能改变 [root@kube-node1 ~]# touch Dockerfile ##复制repo文件到aa目录下,用户Dockerfile中的文件复制 [root@kube-node1 aa]# cp /etc/yum.repos.d/centos7.repo . ##编写Dockerfile文件,文件名不能改变 ##Dockerfile中所有的指令,必须是大写的(例如: FROM, RUN, COPY等) #FROM 指定基础镜像,Dockerfile会对基础镜像进行编辑,生成新的镜像 #RUN 指定制作命令, 一条RUN,就代表一条要在容器内执行的命令 #COPY 复制,#即把当前目录下的文件,拷贝到容器内 [root@kube-node1 aa]# vim Dockerfile FROM docker.io/centos:latest RUN rm -rf /etc/yum.repos.d/* COPY centos7.repo /etc/yum.repos.d/centos7.repo RUN yum -y install net-tools psmisc vim iproute vim bash-completiono tree && yum clean all

########### 根据Dockerfile生成新的镜像,在kube-node1上操作 ############ ##build 创建新的镜像;-t 指定新镜像的名字和标签;. 指定Dockerfile文件所在的目录 [root@kube-node1 aa]# docker build -t newos:latest . Sending build context to Docker daemon 3.072 kB Step 1 : FROM docker.io/centos:latest ---> 76d6bc25b8a5 Step 2 : RUN rm -rf /etc/yum.repos.d/* ---> Running in ade538eaf11c ---> a934f7feea65 Removing intermediate container ade538eaf11c Step 3 : COPY centos7.repo /etc/yum.repos.d/centos7.repo ---> bd5e3914cda6 Removing intermediate container 80ea3d53088e Step 4 : RUN yum -y install net-tools psmisc vim iproute vim bash-completiono tree && yum clean all ........ ##查看本地仓库镜像,newos创建成功 [root@kube-node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE newos latest fb3d85796504 33 minutes ago 280.8 MB myos latest 10a665c54e58 58 minutes ago 317.8 MB ....... 八,Dockerfile 入门Dockerfile 创建服务镜像Dockerfile 创建 Apache 服务案例

Dockfile中,不指定CMD时,则使用默认的启动命令;如果没有使用CMD指定启动命令,则会继承上一个镜像的默认启动命令;CMD 容器的默认启动命令,有且只能有一条;

FROM myos:latest MAINTAINER Jacob redhat@163.com RUN yum -y install httpd ENV LANG=C WORKDIR /var/www/html/ EXPOSE 80 443 CMD ["httpd", "-DFOREGROUND"]

######## WORKDIR 在Dockerfile中用于定义容器默认工作目录 ########### #使用ssh远程执行以下三条命令,f1和f2文件,最终都是创建在/root目录下 #因为每次ssh连接都是代表不同的连接,无法保持上次连接时,命令的执行状态 [root@localhost ~]# ssh host1 touch f1 [root@localhost ~]# ssh host1 cd /tmp [root@localhost ~]# ssh host1 touch f2 ##### Dockerfile和ssh类似,所以要使用 WORKDIR容器默认工作目录的指定 ##### 在容器内安装并启动apache服务

###### 使用myos镜像创建一个容器,在kube-node1上操作 ############ ##查看本地仓库镜像,myos镜像已经部署好了yum和基本软件包 [root@kube-node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myos latest 10a665c54e58 58 minutes ago 317.8 MB ....... ####-it 以交互式终端的方式,根据centos镜像启动一个容器 ##/bin/bash 为容器内的命令,容器内存在,才可以使用,不指定则会选择默认容器命令 [root@kube-node1 ~]# docker run -it myos:latest /bin/bash [root@a670096c60ad /]#

############ 部署并启动apache服务,在kube-node1上操作 ############ ####安装apache的服务软件httpd [root@a670096c60ad /]# yum -y install httpd #因为容器内并没有systemd的服务,无法使用systemctl来启动httpd的服务 #查看httpd的服务文件,获取环境变量文件和服务启动命令 [root@a670096c60ad /]# cat /lib/systemd/system/httpd.service ........ [Service] ........ #环境变量文件 EnvironmentFile=/etc/sysconfig/httpd #启动命令,$OPTIONS 此环境变量为空,可以不用写 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND ........ ####从环境变量文件中,获取环境变量 [root@a670096c60ad /]# vim /etc/sysconfig/httpd ...... LANG=C ####设置环境变量 [root@a670096c60ad /]# LANG=C #启动httpd服务,$OPTIONS 此环境变量为空,可以不用写 #Ctrl C 退出 [root@54cb8bfa063d /]# /usr/sbin/httpd -DFOREGROUND AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message 编写http的Dockerfile文件

########## 制作Dockerfile自动创建镜像脚本,在kube-node1上操作 ########### ##创建一个目录,名称任意定义 [root@kube-node1 ~]# mkdir bb ##进入到aa目录下 [root@kube-node1 ~]# cd bb/ ##创建Dockerfile文件,文件名不能改变 [root@kube-node1 ~]# touch Dockerfile ##Dockerfile中所有的指令,必须是大写的(例如: FROM, RUN, COPY等) #FROM 指定基础镜像,Dockerfile会对基础镜像进行编辑,生成新的镜像 #MAINTAINER 指定创建镜像者的信息 #RUN 指定制作命令, 一条RUN,就代表一条要在容器内执行的命令 #ENV 指定环境变量 #EXPOSE 开启httpd服务要使用的端口,80和443 #WORKDIR 指定启动容器后的,默认工作目录 #ADD 指拷贝,Dockerfile目录下的文件,拷贝到容器内(tar.gz,tar.bz2格式会自动解压) #CMD 指定默认启动命令,格式示例:#ls -la 则: CMD ["ls", "-l", "-a"] [root@kube-node1 bb]# vim Dockerfile FROM myos:latest MAINTAINER tarena RUN yum -y install httpd ENV LANG=C EXPOSE 80 443 WORKDIR /var/www/html ADD index.html /var/www/html/index.html CMD ["/usr/sbin/httpd","-DFOREGROUND"]

############ 创建apache的默认访问页面,在kube-node1上操作 ############## [root@kube-node1 bb]# echo "hello world" > index.html 运行容器

创建服务镜像:docker build -t myos:httpd

########## 使用Dockerfile文件,创建新的镜像,在kube-node1上操作 ########## ##build 创建新的镜像;-t 指定新镜像的名字和标签;. 指定Dockerfile文件所在的目录 [root@kube-node1 bb]# docker build -t myos:httpd . Sending build context to Docker daemon 3.072 kB Step 1 : FROM myos:latest ---> 10a665c54e58 Step 2 : RUN yum -y install httpd ---> Running in b3226773e826 .......

运行容器验证服务

############# 验证查看镜像,在kube-node1上操作 ############# ##查看镜像,myos:httpd 镜像创建成功 [root@kube-node1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myos httpd 019f5b48a5a0 About a minute ago 372.4 MB ...... ##使用myos:httpd 镜像,创建一个容器 [root@kube-node1 ~]# docker run -itd myos:httpd 800b21aa9736bd68a521e7d5667835710b24829a136c5a0baa3e24cc319d3b70 ##查看正在使用的容器 [root@kube-node1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 800b21aa9736 myos:httpd "/usr/sbin/httpd -DFO" About a minute ago Up About a minute 80/tcp, 443/tcp reverent_thompson ##查看容器的详细信息 [root@kube-node1 ~]# docker inspect 800b21aa9736 ........ ........ ########## ENV中, PATH 指定可执行文件的搜索路径,为命令的默认查找路径 ########### ############# 如果没有指定PATH,则执行所有命令,都需要指定绝对路径 ########### "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "LANG=C" ], ############# Cmd 默认的启动命令,即:启动容器时,默认的启动命令 ############# "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"/usr/sbin/httpd\" \"-DFOREGROUND\"]" ], ........ ........ "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "b0cf7b16b65e272fa685ac975bce1f13647379beb8e22191d6623e30817829bc", "EndpointID": "f010d043874446d28892fa52903165f7370cccbc7cf449d325ad07c1c58fe6c4", ################## 容器的网关和IP地址 ######################### "Gateway": "172.17.0.1", "IPAddress": "172.17.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:02" ........ ........

####### 根据容器的IP地址,访问容器内的httpd服务,在kube-node1上操作 ######## ##访问容器内的apache服务 [root@kube-node1 ~]# curl http://172.17.0.2 hello world 九、私有仓库安装部署私有仓库创建私有仓库

i53470怎么运行5个虚拟机,i5最大开多少个虚拟机(3)

搭建私有仓库使用私有仓库

docker主机修改配置文件 /etc/sysconfig/docker

十、外部存储卷卷的用途

Docker容器不保持任何数据,重要数据请使用外部卷存储(数据持久化),容器可以挂在真实机目录或共享存储为卷

主机卷的映射

将真实机目录挂载到容器中提供持久化存储,目录不存在就自动创建,目录存在就直接覆盖掉,多个容器可以映射同一个目录,来达到数据共享的目的
启动容器时,使用 -v 参数映射卷 docker run -it -v 真实目录: 容器内目录 docker.io/centos: latest

多主机共享目录

有多台 docker 主机的情况下,我们也可以使用共享存储,来作为docker的卷服务,可以实现多主机之间多容器的共享卷服务

i53470怎么运行5个虚拟机,i5最大开多少个虚拟机(4)

十一,发布 docker 服务怎么访问 docker 服务

默认容器可以访问宿主机,但外部网络的主机不可以访问容器内的资源,解决这个问题的最佳方法是端口绑定,容器可以与宿主机的端口进行绑定,从而把宿主机变成对应的服务。宿主机和容器内部的服务端口绑定以后,用户在访问宿主机的服务端口时,就是在访问容器内部的服务

发布 docker 服务

我们使用 -p参数把容器端口和宿主机端口绑定 -p 宿主机端口: 容器端口
例如:把宿主机变成 httpd

docker run -itd -p 80:80 docker.io/myos:httpd

例如:把宿主机变成nginx

docker run -itd -p 80:80 docker.io/nginx:latest 十二,Podman(podmanager):

是一个功能齐全的容器引擎,它是一个简单的无需守护的用来管理镜像、容器的工具。Podman提供了一个与Docker CLI兼容的操作方式,简单地说:alias docker=podman。大多数Podman命令都可以普通用户运行,而无需其他额外的权限。
图片

容器(Container):

指的是针对应用所需的运行环境资源(依赖库/目录/网络/用户……等)进行整体封装的技术。封装好的镜像相比虚拟机的粒度要更细,可移植性强。每个容器采用沙箱机制,相互隔离。

传统虚拟化与容器技术对比:
图片

i53470怎么运行5个虚拟机,i5最大开多少个虚拟机(5)

仓库=》镜像=》容器 的关系:

一、安装环境

# yum module install -y container-tools //安装容器工具及其模块配置 # yum install -y podman-docker //安装docker兼容包(可选) 二、访问仓库

1)设置默认的仓库地址(全局配置)
可以使用官方仓库(比如registry.access.redhat.com)、第三方仓库(比如docker.io),或者私有仓库(比如registry.lab.example.com)。

# vim /etc/containers/registries.conf [registries.search] registries = ['registry.lab.example.com'] //设置搜索镜像的默认仓库地址 .. .. [registries.insecure] registries = ['registry.lab.example.com'] //允许访问不安全的仓库(比如HTTPS证书无效或过期等情况) .. ..

2)登录仓库(如果需要的话,比如push上传镜像时)

# podman login registry.lab.example.com Username: admin Password: *********** Login Succeeded!

3)搜索仓库中的镜像(比如nginx)

# podman search nginx INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED example.com registry.lab.example.com/library/nginx 三、管理镜像

1)下载镜像到本地

# podman pull registry.lab.example.com/library/nginx .. .. //容器存储默认工作目录 /var/lib/containers/

2)查看镜像

# podman images //列出本地镜像 REPOSITORY TAG IMAGE ID CREATED SIZE registry.lab.example.com/nginx latest 4bb46517cac3 3 months ago 137 MB # podman image inspect 4bb4 //查看xxxx镜像的详细配置信息 .. ..

3)导出/备份镜像

# podman save nginx > /root/nginx.tar

4)导入镜像

# podman load -i /root/nginx.tar nginx-new:latest

5)删除镜像

# podman rmi xxxx //删除ID为xxxx的镜像 # podman rmi -a //删除所有镜像 四、管理容器1. 启动容器

# podman run -d registry.lab.example.com/library/nginx 80b22e7bd4d789773223f5afc85808ea472e82ec72f162903cd658ed6d98091c # podman ps //列出启用中的容器(结合-a选项可以列出所有) .. .. # podman container inspect 4bb4 //查看xxxx容器的详细信息 .. ..

# podman run --rm registry.lab.example.com/library/nginx cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" .. ..

# podman run -it registry.lab.example.com/library/nginx /bin/bash root@840b592a6d3f:/# nginx -v //检查nginx版本 nginx version: nginx/1.19.2 root@840b592a6d3f:/# ls /usr/share/nginx/html/ //检查网页目录 50x.html index.html root@840b592a6d3f:/# exit //退出容器 exit #

[root@red ~]# podman run -d -p 8000:80 nginx 2b9ef8c0864149e2cf7860e903e36ba9deaa1717863f172b2bf2e5c5f3f6600c [root@red ~]# podman ps //列出活动中的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b9ef8c08641 registry.lab.example.com/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago 0.0.0.0:8000->80/tcp ecstatic_maxwell .. .. [root@red ~]# curl http://127.0.0.1:8000 //通过主机端口访问容器中的web站点 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> .. ..

# mkdir /opt/webroot //准备网页目录 # echo "Podman Test" > /opt/webroot/index.html //准备默认测试网页 # podman run -d -p 8001:80 -v /opt/webroot:/usr/share/nginx/html nginx ba64a15abdce1dbd4ed834ad061efde2f7ea421a862076468cbbd694c587f8ca # curl http://127.0.0.1:8001 //测试结果 Podman Test 2. 访问运行中的容器

[root@red ~]# podman exec -it ba64 bash root@ba64a15abdce:/# service nginx status [ ok ] nginx is running. root@ba64a15abdce:/# exit exit [root@red ~]#

[root@red ~]# podman inspect ba64 | grep IPAddress .. .. "SecondaryIPAddresses": null, "IPAddress": "10.88.0.6", .. ..

[root@red ~]# echo AAAA > /root/a.html //建立测试网页 [root@red ~]# podman cp /root/a.html ba64:/usr/share/nginx/html/a.html //复制文件到容器 [root@red ~]# curl http://127.0.0.1:8001/a.html //确认结果 AAAA

[root@red ~]# curl http://localhost:8001/ //浏览8001端口访问目标容器首页 Podman Test [root@red ~]# curl http://localhost:8001/a.html //浏览指定页面 AAAA 3. 关闭/*死容器

[root@red ~]# podman stop ba64 //若要*容器改用kill ba64a15abdce1dbd4ed834ad061efde2f7ea421a862076468cbbd694c587f8ca [root@red ~]# podman ps -a | grep ba64 //检查容器状态 ba64a15abdce registry.lab.example.com/library/nginx:latest nginx -g daemon o... 47 minutes ago Exited (0) 25 seconds ago 0.0.0.0:8001->80/tcp dreamy_swirles

[root@red ~]# podman start ba64 //启用已关闭的xx容器 ba64a15abdce1dbd4ed834ad061efde2f7ea421a862076468cbbd694c587f8ca [root@red ~]# podman ps -a | grep ba64 //检查容器状态 ba64a15abdce registry.lab.example.com/library/nginx:latest nginx -g daemon o... 48 minutes ago Up 2 seconds ago 0.0.0.0:8001->80/tcp dreamy_swirles

[root@red ~]# podman rm -f ba64 //删除已关闭的xx容器(如果不加-f,则需要先stop此容器) ba64a15abdce1dbd4ed834ad061efde2f7ea421a862076468cbbd694c587f8ca [root@red ~]# podman ps -a | grep ba64 //检查删除结果(无输出) [root@red ~]# 五、为容器设置systemd服务

[root@red ~]# podman run --name myweb -d -p 80:80 -v /opt/webroot:/usr/share/nginx/html nginx 52e6996bef86c501731115216c84a2f48d1a03f8c1a2cad70d27e281bd642b18

[root@red ~]# cd /etc/systemd/system/ //进入服务配置目录 [root@red system]# podman generate systemd -n myweb --files /etc/systemd/system/container-myweb.service

[root@red system]# systemctl daemon-reload

4)配置congtainer-myweb服务开机自启

[root@red system]# systemctl enable container-myweb Created symlink /etc/systemd/system/multi-user.target.wants/container-myweb.service → /etc/systemd/system/container-myweb.service.

5)关闭当前运行的容器

[root@red system]# podman stop 52e6 52e6996bef86c501731115216c84a2f48d1a03f8c1a2cad70d27e281bd642b18

6)重启主机后,检查是否可以访问此web

[root@red system]# reboot .. .. [root@server1 ~]# curl http://172.25.0.26/ Podman Test 六、使用无根(rootless)环境

通过rootless无根模式,非特权用户也可以很方便的运行容器(允许开启1024以上端口),以提高服务管理的安全性。
!!! 确认非特权用户的起始可用端口(需要时可更改)

# cat /proc/sys/net/ipv4/ip_unprivileged_port_start 1024

使用systemctl --user会话时,注意要直接以普通用户SSH或console控制台登录,不要使用su或sudo的方式执行。

[zaniu@red ~]$ mkdir -p ~/.config/containers [zaniu@red ~]$ vim ~/.config/containers/registries.conf unqualified-search-registries = ['registry.lab.example.com'] [[registry]] location = "registry.lab.example.com" insecure = true //允许访问不安全的仓库(全局配置中也需要添加仓库地址) blocked = false

[zaniu@red ~]$ podman login registry.lab.example.com //登录仓库(如果仓库要求的话) Username: admin Password: Login Succeeded! [zaniu@red ~]$ podman pull registry.lab.example.com/library/nginx //下载镜像到本地 .. .. //用户容器存储默认工作目录 ~/.local/share/containers/ [zaniu@red ~]$ podman images //检查本地镜像 REPOSITORY TAG IMAGE ID CREATED SIZE registry.lab.example.com/library/nginx latest 4bb46517cac3 3 months ago 137 MB

2)启动一个名为xxnginx的容器(如果SELinux要求启用的话,可以通过:Z传递安全标签)

[zaniu@red ~]$ mkdir /home/zaniu/html [zaniu@red ~]$ echo zaniu > /home/zaniu//html/index.html [zaniu@red ~]$ podman run --name xxnginx -d -p 8080:80 -v /home/zaniu/html:/usr/share/nginx/html:Z nginx 8fa1bc2ccd14ddc57e187ffe8e0035b6bfb1c3189460b3470b3935365f5d9a85 [zaniu@red ~]$ curl http://127.0.0.1:8080 zaniu

[zaniu@red ~]$ mkdir -p ~/.config/systemd/user //创建用户服务配置目录 [zaniu@red ~]$ cd ~/.config/systemd/user //进入用户服务配置目录 [zaniu@red user]$ podman generate systemd --name xxnginx --files //生成container-xxnginx服务配置 /home/zaniu/.config/systemd/user/container-xxnginx.service

[zaniu@red user]$ systemctl --user daemon-reload //更新用户服务配置 [zaniu@red user]$ systemctl --user enable container-xxnginx.service //配置自启动 Created symlink /home/zaniu/.config/systemd/user/multi-user.target.wants/container-xxnginx.service → /home/zaniu/.config/systemd/user/container-xxnginx.service. [zaniu@red user]$ loginctl enable-linger //允许为未登录的用户启动/保持后台服务 //如果linger方式无效,也可以通过用户计划任务实现开机自启动 [zhsan@red user]$ crontab -e @reboot systemctl --user start container-xxnginx.service

[zaniu@red user]$ podman stop xxnginx //停止原来手动运行的容器 [zaniu@red user]$ systemctl --user start container-xxnginx.service //启动容器服务 [zaniu@red user]$ systemctl --user status container-xxnginx.service //检查容器状态 [zaniu@red user]$ systemctl --user stop container-xxnginx.service //停止容器服务 6)重启主机后,确认仍然可以访问web [root@red system]# reboot .. .. [root@server1 ~]# curl http://172.25.0.26:8080/

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.