docker部署之dockerfile和dockercompose

本文详细介绍Dockerfile与docker-compose的应用,包括示例代码与常见容器如MySQL、Redis的部署方式,并提供了Docker的基本操作命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

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"]

示例五:

FROM openjdk:8
MAINTAINER xxx
WORKDIR /bi
# 将 JAR 包和配置文件添加到容器
ADD ada-bi-1.0-SNAPSHOT.jar adabi.jar
COPY config/ config
# 暴露端口
EXPOSE 8088
# 启动 JAR 包并指定配置文件位置
ENTRYPOINT ["java", "-jar", "adabi.jar", "--spring.config.location=/bi/config/"]

二、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是镜像名称和版本号

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

菜鸟蹦迪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值