docker部署之dockerfile和dockercompose

目录

dockerfile

示例一:

示例二:

二、docker-compose

示例一:

示例二

三、docker常用容器部署

mysql

redis:

nginx:

nginx.comf:

mongo:

minio

四、docker常用命令

docker相关:

镜像相关:

容器相关

dockerfile

docker-compose

五、将镜像上传私有仓库及拉取


一、dockerfile

示例一:

 ## 基础镜像java
FROM openjdk:8
 ## 作者是lanjie
 MAINTAINER lanjie
 ## 就是你上传的jar包的名称。给jar包起个别名
 ADD  jeecg-system-start-3.6.2.jar  case.jar
 ## 就是在容器中以多少端口号运行
 EXPOSE 8080
 ## 容器启动之后执行的命令,java -jar spring_boot.jar 即启动jar
 ENTRYPOINT ["java","-jar","case.jar"]

示例二:

## 基础镜像java

FROM openjdk:8

## 作者是lanjie

 MAINTAINER xxx

 #将文件和jar包放进容器
ADD   service.jar  service.jar  
COPY  config2   /

## 就是在容器中以多少端口号运行
EXPOSE 8503

RUN bash -c 'touch /service.jar'

## 容器启动之后执行的命令,java -jar config.jar 即启动jar

ENTRYPOINT ["java", "-jar", "/service.jar", "--spring.profiles.active=test"]

示例三:

FROM nginx
ENV LANG en_US.UTF-8
RUN echo "server {  \
                      listen       80; \
                      #location ^~ /jeecg-boot { \
                      #proxy_pass              http://jeecg-boot-system:8080/jeecg-boot/; \
                      #proxy_set_header        Host jeecg-boot-system; \
                      #proxy_set_header        X-Real-IP \$remote_addr; \
                      #proxy_set_header        X-Forwarded-For \$proxy_add_x_forwarded_for; \
                  #} \
                  #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
                  location / { \
                     root   /var/www/html/; \
                      index  index.html index.htm; \
                      if (!-e \$request_filename) { \
                          rewrite ^(.*)\$ /index.html?s=\$1 last; \
                          break; \
                      } \
                  } \
                  access_log  /var/log/nginx/access.log ; \
              } " > /etc/nginx/conf.d/default.conf \
    &&  mkdir  -p  /var/www \
    &&  mkdir -p /var/www/html

copy ./dist /var/www/html/
EXPOSE 80

示例四:

# 基于镜像基础
FROM python:3.9
 
# 设置代码文件夹工作目录 /test
WORKDIR /test
 
# 复制当前代码文件到容器中 /test
ADD . /test
 
# 安装所需的包
RUN pip install --upgrade pip 
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
EXPOSE 5000

# Run app.py when the container launches
CMD ["python", "hello_store.py"]

二、docker-compose

示例一:

version: "3"
services:
  nginx:
    image: nginx
    container_name: nginx_case
    restart: always
    ports:
      - 80:80
    depends_on:
      - case-scale
    volumes:
      - ./nginx/nginx.d/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/logs:/var/log/nginx
      - ./nginx/html:/usr/share/nginx/html

  case-scale:
    build: ./dockerfile
    image: case_end
    container_name: case_end
    restart: always
    command: /bin/bash -c "java -jar /opt/jar/TEST-alarm-center.jar"
    ports:
      - "8080:8080"
    volumes:
      - ./data/test:/data/test
      - ./jar/:/opt/jar/
    depends_on:
      - my_redis
      - my_mysql
  my_redis:
    container_name: case-redis
    image: redis:latest
    ports:
      - "6379:6379"
    restart: always  

  my_mysql:
    container_name: case-db
    image: mysql:8.0
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      lower_case_table_names: "1"
      TZ: Asia/Shanghai
    volumes:
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/logs:/logs"

示例二

version: "3.8"
services:
  
  my_redis:
    container_name: redis-build
    image: redis:latest
    ports:
      - "6367:6369"

  my_mysql:
    container_name: mysql_build
    image: mysql:8.0
    ports:
      - "3307:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      lower_case_table_names: 1
      TZ: Asia/Shanghai
    volumes:
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/logs:/logs"

  my_mongo:
    image: mongo
    container_name: mongo-build
    restart: always
    ports:
      - "27017:27017"
    volumes:
      - ./mongodb/data/db:/data/db
      - ./mongodb/data/log:/var/log/mongodb
      - ./mongodb/data/config:/etc/mongo

  my_minio:
    image: minio/minio
    container_name: minio-build
    ports:
      - "9000:9000"
      - "9090:9090"
    environment:
      - "MINIO_ACCESS_KEY=minioadmin"
      - "MINIO_SECRET_KEY=minioadmin"
    volumes:
      - "./minio/data:/data"
      - "./minio/config:/root/.minio"
    command: server /data --console-address ":9090"
    restart: always

  config:
    build: 
      context: ./config
      dockerfile: dockerfileConfig
    container_name: config
    restart: always
    ports:
      - "8840:8840"

  service:
    build: 
      context: ./service
      dockerfile: dockerfileService
    container_name: service
    restart: always
    ports:
      - "8503:8503"

     

  platform:
      build: 
        context: ./platform
        dockerfile: dockerfilePlatform
      container_name: platform
      restart: always
      ports:
        - "8587:8587"
      depends_on:
        - service
        - config

  gateway:
    build:
      context: ./gateway
      dockerfile: dockerfileGateway
    container_name: gateway
    restart: always
    ports:
      - "8110:8110"

  nginx:
      image: nginx
      container_name: nginx_build
      restart: always
      ports:
        - "81:81"
      depends_on:
        - gateway
      volumes:
        - ./nginx/nginx.d/nginx.conf:/etc/nginx/nginx.conf
        - ./nginx/logs:/var/log/nginx
        - ./nginx/html:/usr/share/nginx/html    
      depends_on:
        - service
        - config
        - platform 
        - gateway

三、docker常用容器部署

mysql

docker run -id \
-p 3307:3306 \
--name=mysql-3307 \
-v ./conf:/etc/mysql/conf.d \
-v ./logs:/logs \
-v ./data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
mysql:8.0 --lower_case_table_names=1

redis:

docker run -id \
--name redis_6380 \
-p 6380:6379 \
-v ./conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v ./data/:/data \
-v ./log/redis.log:/var/log/redis.log \
redis

nginx:

docker run -id --name=nginx \
-p 3100:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \    
-v $PWD/html:/usr/share/nginx/html \
nginx




nginx.conf:
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;


server {
    listen  80;    
    server_name 120.26.171.81; 
    location / {         
        root   /usr/share/nginx/html/dist;
        index  index.html index.htm;
        # nginx 报404需要加下面这行
        try_files $uri $uri/ /index.html last; 
        #nginx 报405加下面这行
        error_page 405 =200 http://$host$request_uri;
     }
     location /platform {
        proxy_pass      http://120.26.171.81:8587;
    }
     location /inteservice {
        proxy_pass     http://120.26.171.81:8840;
    }



    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
}

mongo:

docker run -it --name mongodb -v /root/docker_volume/mongodb/data:/data/db -p 27017:27017 mongo --auth

minio

docker run -p 9000:9000 -p 9090:9090 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=minioadmin" \
     -e "MINIO_SECRET_KEY=minioadmin" \
     -v /home/minio/data:/data \
     -v /home/minio/config:/root/.minio \
     minio/minio server \
     /data --console-address ":9090" -address ":9000"

四、docker常用命令

docker相关:

systemctl enable docker

systemctl start docker

systemctl restart docker

systemctl stop docker

查看docker状态:

systemctl status docker

镜像相关:

registry代表镜像仓库

查看镜像

docker images

搜索镜像:

docker search registry

拉取

docker pull registry

删除:

docker rmi registry/registry-id

查看所有镜像的id

docker images -q

容器相关

1、创建容器:

docker run -id --name container -p 80:80 images:(version) 

2、查看容器

docker ps (-a)

3、进入容器:(c2是运行着的)

docker exec -it c2 /bin/bash

4、进入(查看)容器

docker inspect registry_name

5、启动

docker start name

6、停止容器

docker stop name

7、删除容器

docker rm name

8、暂停所有容器

docker pause $(docker ps -q)

9、删除所有容器

docker rm -f $(docker ps -aq)

dockerfile

1、容器转成镜像(传统)

docker commit 容器id 镜像名称 :版本号

docker save -o 压缩文件名称 镜像名称:版本号

docker load -i 压缩文件名称

2、运行

docker build -f ./centos_dockerfile -t itheima_centos:1.0 -t . 

别漏点

docker-compose

docker-compose -f docker-compose-name up -d 

docker-compose -f docker-compose-name down

五、将镜像上传私有仓库及拉取

登录:

docker login -u 你的Docker仓库用户名

创建私有仓库:

标志镜像(指定私有仓库)

docker tag hello-world:v1.0 shlycsd/hub_docker:v1.0

ps: 其中hello-world:v1.0  是镜像名和版本

shlycsd/hub_docker:v1.0  中shlycsd是用户名 hub_docker是仓库名 v1.0 是镜像tag显示在仓库

推送

 docker push shlycsd/hub_docker:v1.0

六、将镜像下到本地 

docker pull myregistry.example.com/myimage:latest

其中myregistry.example.com是镜像仓库名称
myimage:latest是镜像名称和版本号

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Docker是一种容器化技术,用于隔离应用程序和它们的依赖,并以轻量级和可移植的方式进行分发和部署。而Docker ComposeDockerfileDocker生态系统中常用的工具,用于管理和构建多个容器化应用程序。 Docker Compose是一个命令行工具,通过一个简单的文本文件(通常是YAML格式)来定义、配置和运行多个Docker容器。它提供了一种非常简便的方式来描述和管理各个容器之间的关联性,同时还能够一次性启动、停止和删除整个应用程序的所有容器。通过Docker Compose,我们可以轻松地创建和管理包含多个服务的复杂应用程序,例如前端应用程序和后端数据库。 Dockerfile是一个用于定义Docker镜像的文本文件,其中包含了构建镜像所需的指令和配置。通过编写Dockerfile,我们可以描述应用程序的运行环境、依赖关系和启动命令等信息。Docker通过读取Dockerfile并按照其中的指令逐步构建镜像,最终生成一个可执行的容器化应用程序。对于一个基于Nginx的Web应用程序,我们可以使用Dockerfile来定义Nginx的配置和静态资源,然后通过构建镜像来打包应用程序。 综上所述,docker-composeDockerfile和Nginx可以结合使用,实现多个容器之间的协同工作和复杂应用程序的构建。我们可以使用Docker Compose来管理包含Nginx容器的应用程序,通过Dockerfile来定义Nginx镜像的构建过程,最终实现一个可部署的Nginx容器化应用程序。这种方式能够提高应用程序的可移植性、可复用性和易于管理性,为开发人员和运维人员带来许多便利。 ### 回答2: docker-compose是一个可以管理多个容器的工具,它使用一个YAML文件来定义容器的配置信息。dockerfile是用来构建镜像的脚本文件,它包含了一系列的命令来描述容器的构建过程。nginx是一个开源的高性能的Web服务器和反向代理服务器。 使用docker-compose可以很方便地定义和管理多个容器之间的关系和依赖。可以在docker-compose.yaml文件中定义多个服务,每个服务对应一个容器,而这些容器可以通过互联网络进行通信。例如,可以定义一个nginx服务,同时还可以定义一个后端应用程序的服务,并且将两个服务连接在一起。使用docker-compose up命令可以启动所有定义的服务,并且可以使用docker-compose logs命令来查看日志信息。 dockerfile是一个用来描述构建镜像过程的文件,它包含了一系列的命令来指定容器中的操作。在dockerfile中可以使用FROM命令指定基础镜像,然后使用RUN命令来执行一些操作,比如安装软件包、配置环境等。对于nginx这个容器,可以使用dockerfile来构建自定义的镜像,并且可以在其中配置nginx的相关设置,例如端口、路由规则等。 通过使用docker-composedockerfile,可以很轻松地将nginx部署容器中,并且可以定义nginx和其他服务之间的联系和依赖关系。这样可以更加方便地进行应用程序的部署和管理,同时也可以通过容器的隔离性和易于移植性来提高应用程序的安全性和可靠性。 ### 回答3: Docker ComposeDockerfile是两个与Docker相关的重要概念,而Nginx则是一款常用的高性能Web服务器和反向代理服务器软件。 Docker Compose是一个用于定义和运行多个Docker容器的工具。它通过一个单独的YAML配置文件,可以定义容器之间的关系和依赖,并且可以一键式地启动、停止和管理这些容器。使用Docker Compose,我们可以方便地把多个服务组合在一起,比如前端应用、后端应用和数据库等。 Dockerfile是一个用于构建Docker镜像的文本文件。它包含一系列的指令,用于告诉Docker引擎如何构建镜像。通过Dockerfile,我们可以自定义镜像的内容和配置,包括基础镜像选择、软件安装、文件复制、环境变量设置等。Dockerfile的编写可以帮助我们实现镜像的自动化构建和版本管理。 Nginx是一款轻量级的高性能Web服务器和反向代理服务器软件。它具有占用资源少、处理并发请求能力强等特点,被广泛用于构建高性能的Web应用架构。通过使用Nginx,我们可以实现负载均衡、反向代理、静态文件缓存、SSL加密等功能。 结合这三个概念,我们可以运用Docker Compose来定义和管理多个容器,比如前端应用容器和Nginx容器。通过Dockerfile,我们可以定义Nginx容器的自定义镜像,包括选择基础镜像、安装Nginx和相关依赖、设置Nginx配置文件等。然后,通过Docker Compose一键式地启动这些容器,实现前端应用和Nginx服务器的整合。 总之,Docker ComposeDockerfile和Nginx是三个在Docker应用开发和部署中非常重要的概念和工具。它们可以帮助我们方便地管理和构建容器,实现应用的快速部署和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟蹦迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值