docker部署

时间:2022-07-24
本文章向大家介绍docker部署,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、Docker的安装

https://docs.docker.com/install/linux/docker-ce/centos/#uninstall-old-versions 【安装网址】

2、docker的image (分配app运行的资源)

docker pull

3、docker的container(运行image的容器)

docker run -d --name=demo 镜像名称 # 指定名称
docker run -it centos 交互式运行
--进入运行的容器
docker exec -it 容id 执行的命令
docker exec -it 11a5342fsd3 /bin/bash
​
--启动和停止容器
docker start 容器名称
docker stop 容器名称
​
--查询看容器的详细信息
docker inspect 容器id
​
-- 查看日志
docker logs 容器id
4.创建docker网络
docker network create -d bridge hly-net
# 查看网络
docker network ls
----------
# docker network create -d bridge [netName]
-d:指定Docker网络类型,bridge,overlay(用于Swarm)
​
# 运行第一个容器
docker run -d -P --name web1 --network hly-net -v /src/webapp:/webapp training/webapp
​
# 运行第二个容器
docker run -d -P --name web2 --network hly-net -v /src/webapp:/webapp training/webapp
​
测试网络
# docker exec -it web1 bash
# ping web2

4、镜像的构建

4.1 commit (不推荐)

docker commit 基础容器 镜像的名称
docker history 查询操作的历史

4.2 Dockerfile

FROM centos
RUN yum install -y vim -- 安装vim

docker build -t 镜像的名称

dockerfile的语法

FROM 就是image的基本层

LABEL 就是注释

RUN 就是运行的命令(主要每次运行一个run都会生成新的一层)

eg: yum update && yum install -y vim

​ python-dev # 反斜杠线换行

WORKDIR 设定义工作目录

WORKDIR /test # 如果不存在将自动创建

WORKDIR test1 # 这样会在test目录下面创建一个test1文件夹

pwd /test/test1

RUN cd 不推荐

尽量使用WORKDIR

ADD and COPY

ADD Hello /

ADD test.tar.gz / # 添加到根目录并解压

WORKDIR /root

ADD hello test/ # root/test/hello

WORKDIR /root

COPY hello test/

ENV

ENV MYSQL_VERSION 5.7

RUN yum install -y mysql-server="${MYSQL_VERSION }"

VOLUME and EXPOSE

VOLUME

格式为 VOLUME ["/data"]。

创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。

EXPOSE

格式为 EXPOSE <port> [<port>...]。

告诉 Docker 服务端容器暴露的端口号,供互联系统使用。在启动容器时需要通过 -p 宿主机端口:容器的端口,Docker 主机会自动分配一个端口转发到指定的端口。

CMD and ENTRYPOINT

CMD

支持三种格式

​ CMD ["executable","param1","param2"] 使用 exec 执行,推荐方式;

​ CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;

​ CMD ["param1","param2"] 提供给 ENTRYPOINT 的默认参数;

指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。

ENTRYPOINT

两种格式:

​ ENTRYPOINT ["executable", "param1", "param2"]

​ ENTRYPOINT command param1 param2(shell中执行)。

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。

每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。

# 基于哪个镜像
FROM java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,也可以直接写成ADD comment-server.jar /app.jar
ADD comment-server.jar app.jar
RUN bash -c 'touch /app.jar'
# 开放端口    
EXPOSE 8002
# 配置容器启动后执行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

5、端口映射

mysql

docker pull mysql:5.7

docker run --name docker-mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3306:3306 mysql:5.7

docker run -p 3306:3306 --name mysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
​
docker run -p 3306:3306 --name mysql -v /mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
​
# 设置编码格式的
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
​
-v mysql_data:/var/lib/mysql
/var/lib/mysql是mysql容器数据存储位置
-e MYSQL_ROOT_PASSWORD=t
设置mysql密码
​
​
绑定其他容器的ip地址和host名称
--link 其他容器名称:别名名称
docker run -d --link 其他容器名称:别名名称 .....

redis

docker pull redis

docker run --name dokcer-redis -d -p 6379:6379 redis

6、服务的编排:

docker-compose的安装

通过docker-compose.yml方式运行
version: '2'
services:
​
 mysql:
    image: mysql
    restart: always
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: roof
    ports:
      - "3306:3306"
    volumes:
      - mysql_vol:/var/lib/mysql
    networks:
      - micro
​
 server:
    image: server
    container_name: server
    ports:
      - "8761:8761"
    networks:
      - micro
​
 client:
    image: client
    container_name: client
    ports:
      - "8762:8762"
    depends_on:
      - mysql
      - server
    networks:
      - micro
​
networks:
  micro:
    driver: bridge
​
volumes:
  mysql_vol:

docker-compose up -d 启动部署

在docker部署微服务项目:

1、使用dockerfile构建项目镜像

2、在docker使用生成镜像启动对应服务

服务名称

端口

comment-server

8002

house-server

8011

user-server

8000

esp-zuul

9000

esp-web

7000

comment-server ->user-server

部署用户服务

docker run -d --name user-server --hostname user -p 8000:8000 house/user

房产服务

docker run -d --name house-server --hostname house --link user-server:user -p 8011:8011 house/house

部署评论服务

docker run -d --name comment-server --hostname comment --link user-server:user -p 8002:8002 house/comment

部署网关

docker run -d --name zuul-server --hostname zuul --link house-server:house --link user-server:user --link comment-server:comment -p 9000:9000 house/zuul

部署web

docker run -d --name web --link zuul-server:zuul -p 7000:7000 house/web