一、容器介绍

1、Linux里面容器的作用

- Linux中的容器是装应用的

- 容器就是将软件打包成标注化单元,用于开发、交付和部署

- 容器技术已经成为应用程序封装和交付的核心技术

2、容器的优缺点

1.优点

- 相比于传统的虚拟化技术,容器更加简洁高效

- 传统虚拟机需要给每个VM安装操作系统

- 容器使用的共享公共库和程序

2.缺点

- 容器的隔离性没有虚拟化强

- 共用Linux内核,安全性有先天缺陷

3、podman描述

1.podman和容器的关系:

- podman是完整的一套容器管理系统

- podman提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术 

二、podman安装

[root@localhost ~]# yum -y install podman

三、镜像、仓库

1、镜像概念

1.镜像是启动容器的核心

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

2.在podman中容器是基于镜像启动的

3.镜像采用分层设计

4.使用COW技术

2、 官方镜像库

docker.io、quay.io

3、镜像的名称和标签

指定镜像的方法:

        - 每一个镜像都对应唯一的镜像id

        - 镜像名称(文件名称)+标签(路径) == 唯一

        - 每一个镜像都有标签,如果没写就是默认标签 latest

        - 我们在调用镜像的时候,如果没有指定标签也是latest

4、常用命令

podman images                   #查看本机镜像
podman search  关键字            #查找镜像(需要能访问互联网)
    案例:podman search httpd
podman pull    镜像名称:标签     #下载镜像(需要能访问互联网)
    案例:podman pull localhost/myos:latest
podman load -i 备份文件.tar.gz   #导入镜像
    案例:podman load -i /root/httpd.tar.gz
镜像管理命令:
    podman images                  #查看镜像
    podman search                  #查找镜像
    podman rmi 镜像名称:镜像标签     #删除镜像
podman run 命令                  #运行容器    run = 创建 + 启动 + 进入
格式:podman run -选项 镜像名称:镜像标签 启动命令
查看run的选项
    podman help run
    man podman-run
命令常用参数:
    -i:交互式
    -t:终端
    -d:后台运行
    --name:容器名字
案例:
    [root@localhost ~]# podman pull docker.io/library/httpd  #下载镜像
    [root@localhost ~]# podman images                 #查看镜像
    REPOSITORY                TAG      IMAGE ID       CREATED       SIZE
    docker.io/library/httpd   latest   c30a46771695   2 weeks ago   148 MB
    [root@localhost ~]# podman run -it c30 /bin/bash  #运行容器,前台运行必须加解释器、后台不用

四、podman容器管理

1、容器管理命令

1、启动容器

podman run -选项 镜像名称:镜像标签 启动命令

2、查看容器

podman ps [-a  所有容器id] [-q 只显示容器id]

3、删除容器

podman rm 容器id

4、容器管理命令启动、停止、重启

podman   start  |  stop  |  restart   容器id

 5、进入容器,启动新进程

podman   exec   -it  容器id   启动命令

五、对外发布容器服务

1、如何访问podman服务

1、默认容器可以访问外网

2、但外部网络的主机不可以访问容器内的资源

3、容器每次创建IP地址都会改变

4、解决这个问题的最佳方法是端口绑定

5、容器可以与宿主机的端口进行绑定

6、从而把宿主机变成对应的服务,不用关心容器的IP地址

 2、发布podman服务

1、使用 -p 参数把容器端口和宿主机端口绑定

2、同一宿主机端口只能绑定一个容器服务

3、-p [可选IP]:宿主机端口:容器端口

4、案例:把宿主机变成apache

        podman run -d -p 80:80 myos:httpd

六、容器共享卷

1、卷的用途(类似挂载)

1、podman容器不适合保存任何数据
2、数据文件与配置文件频繁更改
3、修改多个容器中的数据非常困难
4、多容器之间有数据共享、同步需求
5、重要数据在容器内不方便管理易丢失
6、解决这些问题请使用主机卷映射功能

2、主机卷的映射

1、podman可以映射宿主机文件或目录到容器中
-   目标对象不存在就自动创建
-   目标对象存在就直接覆盖掉
-   多个容器可以映射同一个目标对象来达到数据共享的目的
2、启动容器时,使用-v 映射参数(可有多个)
-   podman run -itd -v 宿主机对象:容器内对象 镜像名称:标签

 3、卷映射案例

[root@localhost ~]# podman run -itd --name myweb c30a46771695 #启动后端容器
[root@localhost ~]# podman inspect myweb | grep "IPAddress.:" | awk -F'"' '{print $4}' #查看后端容器ip
[root@localhost ~]# mkdir /var/webroot                            #新建目录
[root@localhost ~]# echo TestApache > /var/webroot/index.html     #编写网页测试文件
[root@localhost ~]# podman run -itd --name httpd -p 80:80 -v /var/webroot/:/usr/local/apache2/htdocs/ c30a46771695             #映射卷完成、并启动容器
[root@localhost ~]# podman exec -it httpd /bin/bash               #进入容器
root@3fbd2dc5c49e:/usr/local/apache2# find / -name "index.html"   #查询网页文件位置
/usr/local/apache2/htdocs/index.html    #实际位置
[root@localhost ~]# curl 127.0.0.1                                #验证

踩坑记:
    默认apache网页根目录是/var/www/html/,经过启动容器后查询发现根目录改变,因此卷映射处要改成实际映射的目录
    

七、管理系统服务

1、systemd

1.一个更高效的系统&服务管理器

        - 开机服务并行启动,各系统服务间的精确依赖

        - 服务目录:/usr/lib/systemd/system/

        - 主要管理工具:systemctl

2、管理员管理容器服务

1.管理员服务文件默认路径

        - /usr/lib/systemd/system/

2.生成服务启动配置文件

        --files:生成文件类型

        podman generate systemd --name 容器名 --files

3.重新加载服务启动配置文件 

        systemctl daemon-reload

3、案例

将容器配置成systemd管理的服务
[root@localhost ~]# cd /usr/lib/systemd/system/    #进入服务目录
[root@localhost system]# podman generate systemd --name httpd --files  #建立服务文件
/usr/lib/systemd/system/container-httpd.service
[root@localhost system]# systemctl daemon-reload                       #重新加载服务文件
[root@localhost system]# systemctl enable container-httpd.service      #设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/container-httpd.service to /usr/lib/systemd/system/container-httpd.service
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐