前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker部署

docker部署

作者头像
HUC思梦
发布2020-09-03 17:01:37
7840
发布2020-09-03 17:01:37
举报
文章被收录于专栏:HUC思梦的java专栏

1、Docker的安装

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

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

代码语言:javascript
复制
docker pull

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

代码语言:javascript
复制
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网络
代码语言:javascript
复制
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 (不推荐)

代码语言:javascript
复制
docker commit 基础容器 镜像的名称
docker history 查询操作的历史

4.2 Dockerfile

代码语言:javascript
复制
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,当指定多个时,只有最后一个起效。

代码语言:javascript
复制
# 基于哪个镜像
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

代码语言:javascript
复制
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方式运行
代码语言:javascript
复制
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

部署用户服务

代码语言:javascript
复制
docker run -d --name user-server --hostname user -p 8000:8000 house/user

房产服务

代码语言:javascript
复制
docker run -d --name house-server --hostname house --link user-server:user -p 8011:8011 house/house

部署评论服务

代码语言:javascript
复制
docker run -d --name comment-server --hostname comment --link user-server:user -p 8002:8002 house/comment

部署网关

代码语言:javascript
复制
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

代码语言:javascript
复制
docker run -d --name web --link zuul-server:zuul -p 7000:7000 house/web
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-12-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.创建docker网络
  • 6、服务的编排:
    • 通过docker-compose.yml方式运行
    • 在docker部署微服务项目:
    相关产品与服务
    命令行工具
    腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档