docker部署

Posted lm970585581

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 







































































































以上是关于docker部署的主要内容,如果未能解决你的问题,请参考以下文章

导致资产预编译在heroku部署上失败的代码片段

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

markdown [Docker] Docker片段列表和命令#linux #docker #snippets

git webhook自动部署服务端代码django python docker等

部署docker

markdown docker-compose片段