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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Cent7安装mysql5.7.11全过程

    https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.11.tar.gz

    HUC思梦
  • idea连接docker实现一键部署

    HUC思梦
  • Access Denied for user root @localhost 解决方案

    问题描述: C:\Users\bo.wang> mysql -u root -p Enter password: ERROR 1045 (28000): ...

    HUC思梦
  • MySQL集群搭建方案(PXC)

    技术层面上,传统的单节点数据库,万一宕机了,就凉凉了。容灾性能差、抗并发能力有限,数据量大的时候查询有瓶颈。学习层面上,作为一个技术人了解一些技术相关的知识那也...

    丰臣正一
  • Docker安装mysql

    先给大家说一下什么是docker镜像,小优的理解就是就是可以运行的产物,但是是个集合。比如w7操作系统(只是一个操作系统)

    猿码优创
  • 跟我一起学docker(14)--docker swarm的使用

    IT故事会
  • LNMP Docker 安装配置

    目标:一条命令建立 LNMP 环境(MySQL、Redis、PHP-fpm、Nginx,etc)。这里只简单列举单容器运行方式。

    康怀帅
  • LNMP Docker 安装配置

    目标:一条命令建立 LNMP 环境(MySQL、Redis、PHP-fpm、Nginx,etc)。 这里只简单列举单容器运行方式,实际请使用 Docker Co...

    康怀帅
  • 「实战篇」开源项目docker化运维部署-linux和docker基本命令(三)

    IT故事会
  • 容器学习点点滴滴(三)

    答案是肯定的。mysql、apache在docker中运行,正好可以发挥容器其弹性的特点,根据不同的业务流量启动相应能力的容器数量。

    希望的田野

扫码关注云+社区

领取腾讯云代金券