继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Docker 基于 CentOS 基础镜像开发环境的搭建与部署

三国纷争
关注TA
已关注
手记 288
粉丝 50
获赞 175

一、检测系统是否存在 Docker 以及 CentOS 镜像

1、检测系统是否存在 Docker 以及 CentOS 镜像

docker images    # 查看当前镜像docker  --version    # 查看 docker 的版本

2、如果没有 Docker 或者 CentOS 镜像需要先进行下载

yum -y install docker-io    # linux centos下安装 dockerapt-get install docker.io    # linux ubuntu下安装 dockerservice docker start    # 启动 dockerdocker pull centos    # 从镜像仓库中拉取 centos 镜像

二、创建基于 CentOS 镜像的:Dockerfile.web

1、进入 modules 目录,创建 Dockerfile.web

cd modules

vim Dockerfile.web

2、编辑 Dockerfile.web,定义 web 的运行环境(不同的语言对应的环境依赖包也就不同)

FROM centos

MAINTAINER <Armin>

RUN yum -y install gcc automake autoconf libtool make

RUN yum -y install gcc gcc-c++

RUN curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -RUN yum install -y nodejs

ADD web /opt/apps/web

WORKDIR /opt/apps/web

EXPOSE 4000RUN npm install pm2 -gCMD ["pm2-docker", "docker.yml"]

3、进入 modules 目录,创建 web 镜像

cd modulesdocker build -t web:centos -f Dockerfile.web .

三、创建基于 CentOS 镜像的:Dockerfile.nginx

1、进入 modules 目录,创建 Dockerfile.nginx

cd modules

vim Dockerfile.nginx

2、编辑 Dockerfile.nginx,定义 nginx 的运行环境(nginx 的配置文件为 nginx.conf)

FROM centos

MAINTAINER <Armin>

RUN yum install -y gcc-c++

RUN yum install -y pcre pcre-devel

RUN yum install -y zlib zlib-devel

RUN yum install -y openssl openssl-devel

ADD nginx-1.12.0 /opt/nginx-1.12.0

WORKDIR /opt/nginx-1.12.0

RUN ./configure

RUN make

RUN make install

EXPOSE 80

ADD run.sh /usr/local/sbin/run.sh

RUN chmod 755 /usr/local/sbin/run.sh

CMD ["/usr/local/sbin/run.sh"]

RUN rm /usr/local/nginx/conf/nginx.conf

COPY devops/nginx.conf /usr/local/nginx/conf/nginx.conf

RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf

3、进入 modules 目录,创建 nginx 镜像

cd modulesdocker build -t nginx:centos -f Dockerfile.nginx .

四、创建基于 CentOS 镜像的:Dockerfile.redis

1、进入 modules 目录,创建 Dockerfile.redis

cd modules

vim Dockerfile.redis

2、编辑 Dockerfile.redis,定义 redis 的运行环境

FROM centos

MAINTAINER <Armin>

ADD epel-release-6-8.noarch.rpm /opt/epel-release-6-8.noarch.rpm

WORKDIR /opt

RUN rpm -ivh epel-release-6-8.noarch.rpm

RUN yum install -y redis

USER rootCMD ["/usr/bin/redis-server", "/etc/redis.conf"]

EXPOSE 6379

3、进入 modules 目录,创建 redis 镜像

cd modulesdocker build -t redis:centos -f Dockerfile.redis .

五、使用 docker-compose 编排容器

1、进入 devops 目录,创建 compose.yml

cd devops

vim compose.yml

2、编辑 compose.yml

version: '3.0'services:
  redis:
    image: redis:centos
  web:
    image: web:centos
    volumes:
      - ../web:/opt/apps/web
      - ./data/log/web:/root/.pm2/logs
  nginx:
    image: nginx:centos
    ports:
      - '3003:80'
    volumes:
      - ../web/static:/opt/apps/web/static
      - ./data/log/nginx:/var/log/nginx
      - ./nginx.conf:/usr/local/nginx/conf/nginx.conf
    depends_on:
      - web

3、进入 devops 目录,执行 compose.yml 启动容器

cd devops

docker-compose -p fof -f compose.yml up -d

4、查看容器是否启动

docker ps

5、常用 docker-compose 命令

docker-compose up -d nginx    # 构建建启动 nignx 容器docker-compose exec nginx bash    # 登录到 nginx 容器中docker-compose down    # 删除所有 nginx 容器,镜像docker-compose ps    # 显示所有容器docker-compose restart nginx    # 重新启动 nginx 容器docker-compose build nginx    # 构建镜像 docker-compose build --no-cache nginx    # 不带缓存的构建docker-compose logs  nginx    # 查看 nginx 的日志 docker-compose logs -f nginx    # 查看 nginx 的实时日志 docker-compose events --json nginx    # 以 json 的形式输出 nginx 的 docker 日志docker-compose pause nginx    #  暂停 nignx 容器docker-compose unpause nginx    # 恢复 ningx 容器docker-compose rm nginx    # 删除容器(删除前必须关闭容器)docker-compose stop nginx    # 停止 nignx 容器docker-compose start nginx    # 启动 nignx 容器
注:上面开发环境的构建和部署流程只是为了方便大家理解思路,有些配置文件和项目文件并没有放上去,望大家知晓!

六、知识点归纳

1、关于 dockerfile 的详解

FROM    # 指定基础镜像 1、FROM <image>  2、 FROM <image>:<tag>  3、FROM <image>:<digest>; <tag>和<digest> 是可选项,默认为 latestRUN    # 运行指定的命令(构建容器时就运行) 1. RUN <command>(shell 命令)  2. RUN ["executable", "param1", "param2"](可执行文件,后面为两个参数)CMD    # 容器启动时运行的命令(构建容器时并不运行) 1. CMD ["executable","param1","param2"] 2. CMD ["param1","param2"] 3. CMD command param1 param2MAINTAINER    # 署名作者EXPOSE    # 暴露容器运行时的监听端口给外部ENV    # 设置环境变量ADD    # 复制文件到容器中(可以是本地文件也可以是一个 url)COPY    # 复制文件到容器中(只能是本地文件)ENTRYPOINT    # 启动时的默认命令,与 CMD相似,区别是 ENTRYPOINT 不会被运行的 command 覆盖,而 CMD 则会被覆盖VOLUME    # 可实现挂载功能,可以将本地文件夹或者其他容器中的文件夹挂载到这个容器中WORKDIR    # 设置工作目录,进入容器中指定的目录,如果目录不存在则会创建USER    # 设置启动容器的用户

2、关于 compose.yml 的详解

compose.yml 主要分为三个部分:services、networks、volumes
services:定义各个容器
networks:定义需要使用到的 network
volumes:定义services使用到的 volume

services:
  build:使用当前目录下的 Dockerfile 进行构建
  context:可以是 Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url
  image:指定运行容器使用的镜像  command:覆盖容器启动后默认执行的命令(Dockerfile 定义的 CMD)
  entrypoint:可以覆盖 Dockerfile 中定义的 entrypoint 命令
  env_file:定义了在 docker-compose.yml 中使用的变量, 封装变化
  environment:定义的变量会覆盖 .env 文件中定义的重名环境变量
  ports:端口映射
    将容器的端口80映射到宿主机的端口8080:
    ports:
         - "8080:80"
         - "127.0.0.1:8080:80"
  volumes:挂载一个目录或者一个已存在的数据卷容器
      - ../web:/opt/apps/web
      - ./data/log/web:/root/.pm2/logs
  depends_on:容器的依赖、启动的先后顺序
  dns:自定义 DNS 服务器
  tmpfs:挂载临时文件目录到容器内部
  expose:暴露端口,但不映射到宿主机,只被连接的服务访问
      - "3000"
      - "8000"
  external_links:链接到 docker-compose.yml 外部的容器
  labels:使用 Docker 标签将元数据添加到容器
  links:链接到其它服务中的容器,可以指定服务名称也可以指定链接别名
  logging:配置日志服务
  extends:扩展另一个服务
    file: compose_new.yml
    service: webapp

七、后记

最后,若文中有出现错误或者遗漏之处,还望指出,共同进步!



作者:ArminLv
链接:https://www.jianshu.com/p/54abce9ad348


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP