知识点:
实验:Docker镜像的创建方法
1)基于已有镜像创建
2)基本本地模板创建
3)基于Dockerfile创建
3.使用Dockerfile文件
Dockerfile的基本结构
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
FROM:指定基础镜像,必须为第一个命令
MAINTAINER: 维护者信息
RUN:构建镜像时执行的命令
ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
CMD:构建容器后调用,也就是在容器启动时才进行调用。
ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去”application”,只使用参数。
LABEL:用于为镜像添加元数据
ENV:设置环境变量
EXPOSE:指定于外界交互的端口
VOLUME:用于指定持久化目录
WORKDIR:工作目录,类似于cd命令
USER:指定运行容器时的用户名或 UID
ARG:用于指定传递给构建运行时的变量
ONBUILD:用于设置镜像触发器
—————————————————–
compose
Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排
服务(service)就是在它下面可以定义应用需要的一些服务,代表配置文件中的每一项服务。每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等,即以容器为粒度,用户需要Compose所完成的任务。
项目(project)代表用户需要完成的一个项目,即是Compose的一个配置文件可以解析为一个项目,即Compose通过分析指定配置文件,得出配置文件所需完成的所有容器管理与部署操作。
Compose的默认管理对象时项目,通过子命令对项目中的一组容器进行便捷地生命周期管理。
使用Compose 基本上分为三步:
1)Dockerfile 定义应用的运行环境
2)docker-compose.yml 定义组成应用的各服务
3)docker-compose up 启动整个应用
一、使用Dockerfile文件创建nginx镜像
[root@Server12 ~]#
[root@Server12 ~]# mkdir nginx
[root@Server12 ~]#
[root@Server12 ~]# cd nginx/
[root@Server12 nginx]# vim run.nginx 创建run.sh脚本
#!/bin/bash
/usr/local/nginx/sbin/nginx 启动nginx
[root@Server12 nginx]# vim Dockerfile 创建dockerfile 文件
FROM rockylinux:9.3 使用rockylinux:9.3镜像
LABEL maintainer-”meng <1319276778@qq.com>” 写入作者信息
WORKDIR /usr/local/src 进入到/usr/local/src目录下
RUN yum install -y wget 执行命令:安装wget wget下载
RUN wget http://nginx.org/download/nginx-1.22.0.tar.gz 下载并解压nginx-1.22.0.tar软件包
RUN tar -zxvf nginx-1.22.0.tar.gz tar包解压
WORKDIR nginx-1.22.0 进入到nginx-1.22.0的目录
RUN yum install -y gcc make pcre-devel zlib-devel 执行命令安装nginx编译器及其插件;gcc编译器
RUN ./configure --prefix=/usr/local/nginx 执行命令配置并指向nginx的安装目录
RUN make 执行命令编译
RUN make install 执行命令安装
RUN /usr/local/nginx/sbin/nginx 启动Nginx服务
RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf 修改Nginx配置文件,以非daemon方式启动
ADD run.sh /usr/local/sbin/run.sh 复制服务启动脚本并设置权限
RUN chmod 755 /usr/local/sbin/run.sh 添加755权限
CMD ["/usr/local/sbin/run.sh"] 设置生成容器时需要执行的脚本
EXPOSE 80
[root@Server12 nginx]# cat run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
[root@Server12 nginx]# docker build -t nginx:rockylinux .
[root@Server12 nginx]# docker images 查看docker镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx rockylinux 99883cbb12b1 14 seconds ago 374MB
[root@Server12 nginx]#
[root@Server12 nginx]# docker run -d -p 80:80 nginx:rockylinux /usr/local/sbin/run.sh docker运行nginx的镜像,在后台运行nginx的容器。-d后台,-p端口,并建立端口映射,宿主机的80映射到容器的80.-v建立目录映射, 宿主机文件映射到容器的文件
6c01ec6438fb3056124f4ef12bead464ef5ea31ec07bdf933788cce79f0864db
[root@Server12 nginx]# docker ps 查看正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c01ec6438fb nginx:rockylinux "/usr/local/sbin/run…" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp, [::]:80->80/tcp modest_sammet
[root@Server12 nginx]#

二:单机容器编排
实验环境:server 7.11还原至docker,开机。
安装容器编排
[root@server11 ~]# dnf update
[root@server11 ~]# DOCKER_CONFIG=${DOCKER_CONFIG:$HOME/.docker}
[root@server11 ~]# mkdir -p $DONFIG/cli-plugins
[root@server11 ~]# curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 45.4M 100 45.4M 0 0 4751k 0 0:00:09 0:00:09 --:--:-- 5828k
[root@server11 ~]#
[root@server11 ~]# chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
[root@server11 ~]# docker compose -v
Usage: docker compose [OPTIONS] COMMAND
[root@server11 ~]# docker compose version
Docker Compose version v2.36.2
[root@server11 ~]#
[root@server11 ~]# mkdir /data
[root@server11 ~]#
[root@server11 ~]# cd /data/
[root@server11 data]#
[root@server11 data]# vim Dockerfile
FROM rockylinux:9.3 使用镜像
LABEL maintainer="meng <1319276778@qq.com>" 使用作者信息
RUN dnf -y install httpd 执行目录安装阿帕奇
EXPOSE 80 指定用于外界访问的端口80
CMD ["-D","FOREGROUND"] 构建容器后在后台运行,在容器启动时,在后台调用,不进入容器里
ENTRYPOINT ["/usr/sbin/httpd"] 配置容器启动阿帕奇
[root@server11 data]# vim docker-compose.yml 创建容器编排的配置文件
version: '3' 版本为3
services: 定义服务
db: 第一个服务:数据库服务
image: mariadb 使用mariadb的镜像
volumes: 定义存储
- /var/lib/docker/disk01:/var/lib/mysql 宿主机的存储位置映射到容器的存储位置
environment: 定义环境
MYSQL_ROOT_PASSWORD: password 数据库的root密码为password
MYSQL_USER: centos 数据库的用户为centos
MYSQL_PASSWORD: password 用户centos用户的密码:password
MYSQL_DATABASE: centos_db 创建的数据库为centos_db
ports: 定义端口
- "3306:3306" 宿主机的3306映射到容器的3306
web: 定义web服务
build: .在当前目录下创建
ports: 定义端口
- "80:80" 宿主机的80映射到容器的80
volumes: 定义存储
- /var/lib/docker/disk02:/var/www/html 宿主机的目录映射到容器的目录
[root@server10 data]# docker compose up -d 在后台运行容器编排
[+] Running 9/9
⠿ db Pulled 48.6s
⠿ d9d352c11bbd Pull complete
[root@server10 data]# docker ps 查看正砸运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0a4a6d430991 mariadb "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp data-db-1
c9460deb1163 data-web "/usr/sbin/httpd -D …" 8 minutes ago Up 8 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp data-web-1
[root@server10 data]# dnf -y install mariadb 安装数据库的客户端
[root@server11 data]# docker ps 查看正砸运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b7537c2599f mariadb "docker-entrypoint.s…" 10 minutes ago Up 10 minutes 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp data-db-1
4753ad507889 data-web "/usr/sbin/httpd -D …" 10 minutes ago Up 10 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp data-web-1
[root@server11 data]# mysql -h 127.0.0.1 -u root -p -e"show databases;" 登录到容器的数据库,地址是127.0.0.1,使用root登录 ,-e在宿主机里显示,数据库内容;
Enter password: 密码为:password
+--------------------+
| Database |
+--------------------+
| centos_db |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
[root@server11 data]# echo "Hello Docker Compose" > /var/lib/docker/disk02/index.html 创建阿帕奇的测试页面,访问阿帕奇的容器,
[root@server11 data]# curl 127.0.0.1 字符界面访问阿帕奇容器
Hello Docker Compose
[root@server11 data]# docker compose ps 查看正在运行的容器编排
WARN[0000] /data/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
data-db-1 mariadb "docker-entrypoint.s…" db 59 minutes ago Up 59 minutes 0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp
data-web-1 data-web "/usr/sbin/httpd -D …" web 59 minutes ago Up 59 minutes 0.0.0.0:80->80/tcp, [::]:80->80/tcp
[root@server11 data]# docker compose stop
WARN[0000] /data/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Stopping 2/2
✔ Container data-web-1 Stopped 0.1s
✔ Container data-db-1 Stopped 0.3s
[root@server11 data]#
[root@server11 data]#
[root@server11 data]# docker compose stop 停止容器编排
WARN[0000] /data/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Stopping 2/2
✔ Container data-db-1 Stopped 0.0s
✔ Container data-web-1 Stopped 0.0s
[root@server11 data]# docker compose ps 查看正在云行的容器编排
WARN[0000] /data/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
[root@server11 data]# docker compose up -d 在后台启动容器编排
WARN[0000] /data/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2
✔ Container data-db-1 Started 0.3s
✔ Container data-web-1 Started 0.2s
[root@server11 data]# init 0
安全提醒
注意:数据库不要部署在容器里,防止容器崩了,数据库文件也没了。