使用Dockerfile文件创建nginx镜像 单机容器编排

知识点:

实验: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

安全提醒

注意:数据库不要部署在容器里,防止容器崩了,数据库文件也没了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇