docker compose安装与常用命令介绍 及使用docker-compose运行一个进销存管理系统
使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知docker compose 是一个用于定义和运行多容器docker应用程序的工具 安装:下在并安装适应系统版本的composecurl -L "https://github.com/docker/compose/releases/downl...
使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
docker compose 是一个用于定义和运行多容器docker应用程序的工具
安装:
下在并安装适应系统版本的compose
curl -L "https://github.com/docker/compose/releases/download/1.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
为安装脚本添加执行权限
chmod +x /usr/local/bin/docker-compose
这样,compose就安装完成了
可使用一下命令测试安装结果
docker-compose --version
使用compose 大致有三个步骤
使用 dockerfile 定义应用程序环境,以便在任何地方重现该环境
在docker-compose.yml文件中定义组成应用程序的服务,以便各个服务在一个隔离的环境中一起运行
运行 docker-compose up 命令,启动并运行整个应用程序
docker compose 将所管理的容器分为三层,分别是工程(project),服务以及容器。docker compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个
工程(默认为docker-compose.yml所在目录的名称)。一个工程可包含多个服务,每个服务中定义了容器运行的镜像,参数和依赖,一个服务可包括多个容器实例
docker-compose.yml 常用命令
build
配置构建时的选项,compose会利用它自动构建镜像。build的值可以是一个路径。例如 build: ./dir
也可以是一个对象,用于指定dockerfile和参数,例如:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
context 为路径
dockerfile 为需要替换默认docker-compose的文件名
args 为构建(build)过程中的环境变量,用于替换dockerfile里定义的ARG参数,容器中不可用
例如
dockfile中
ARG buildno
ARG password
RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"
docker-compose.yml
build:
context: .
args:
- buildno=1
- password=secret
command
覆盖容器启动后默认执行的命令
示例: command: bundle exec thin -p 3000
也可以是一个list,类似于dockerfile中的CMD指令 格式如下:
command:[bundle,exec,thin,-p,3000]
dns
配置dns 服务器. 可以是一个值, 也可以是一个列表. 示例:
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
dns_search
配置DNS的搜索域,可以是一个值,也可以是一个列表。示例:
dns_search:example.com
dns_search:
- dc1.example.com
- dc2.example.com
environment
环境变量设置,可使用数组或字典两种方式
environment:
RACK_ENV: development
SHOW: 'true'
environment:
- RACK_ENV=development
- SHOW=true
env_file
从文件中获取环境变量,可指定一个文件路径或路径列表。如果通过docker-compose -f FILE 指定了compose文件,那么env_file中的路径是compose文件所在目录的
相对路径。使用environment指定的环境变量会覆盖env_file指定的环境变量。
示例:
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
expose
expose 提供 container之间的端口访问,不会暴露给主机使用。同 docker run --expose
示例:
expose: - "3000" - "8000"
external_links
连接到docker-compose.yml外部的容器,甚至并非compose管理的容器,特别是提供共享或公共服务的容器。格式跟links类似
例如:
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
image
指定镜像名称或镜像ID,如果本地不存在该镜像,compose会尝试下载该镜像
示例:
image: java
links
连接到其他服务的容器。可以指定服务名称和服务别名(SERVICE:ALIAS),也可只指定服务名称,同docker run --link
示例:
web:
links:
- db
- db:database
- redis
ports
暴露端口信息,可使用HOST:CONTAINER的格式,也可只指定容器端口(此时宿主机将会随机选择端口),类似于docker run -p
需要注意的是,当使用HOST:CONTAINER格式映射端口时,容器端口小于60将会得到错误的接口,因为yaml会把xx:yy的数字解析为60进制。因此,建议使用字符串的形式。
例子:
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
volumes:
挂载数据卷。同docker run -v
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
volumes_from
从另一个服务或容器挂载卷。可指定只读(ro)或读写(rw),默认是读写(rw)。同docker run --volumes-from
例子
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
container:container_name 格式仅支持 version2
depends_on
用于指定服务依赖,一般是mysql,redis等
指定了依赖,将会优先于服务创建并启动依赖
link2 也可以指定依赖
docker-compose命令常用选项
和docker命令一样,docker-compose命令也有很多选项
build
构建或重新构建服务。服务被构建后将会以project_service的形式标记,例如:compose-setest_db
help
查看指定命令的帮助文档
docker-compose help COMMAND
如 docker-compose help build
kill
通过发送SIGKILL信号停止指定服务的容器
例如:docker-compose kill eureka
logs
查看服务的日志输出
port
打印绑定的公共端口
例如 docker-compose port eureka 8761
这样就可输出eureka服务8761端口所绑定的公共端口
ps
列出所有容器。示例:
docker-compose ps
也可列出指定服务的容器,示例:
docker-compose ps eureka
pull
下载服务镜像
rm
删除指定服务的容器
如 docker-compose rm eureka
run
在一个服务上执行一个命令
docker-compose run web bash
这样即可启动一个web服务,同时执行bash命令
scale
设置指定服务运行容器的个数,以service=num 的形式指定
docker-compose scale user=3 movie=3
start
启动指定服务已存在的容器
docker-compose start eureka
stop
停止已运行的容器
docker-compose stop eureka
停止后,可使用docker-compose start再次启动这些容器
up
构建,创建,重新创建,启动,连接服务的相关容器。所有连接的服务都会启动,除非它们已经运行
docker-compose up 命令会聚合所有容器的输出,当命令退出时,所有容器都会停止。使用docker-compose up -d可在后台启动并运行所有容器
下面,编写一个简单的例子
项目地址 https://gitee.com/shenduedu/JXC.git
准备环境:
现在下载 mysql:5.5 镜像
新建一个目录
把 项目 pull 下来,然后用maven 打包,把tag 下的war包复制到 新建的目录下
然后 在该目录下编写dockerfile 文件
然后 使用 dockerfile 构建我的 JXC项目
FROM java:8
VOLUME /tmp
ADD JXC-0.0.1-SNAPSHOT.war /app.war
EXPOSE 80
ENTRYPOINT ["java","-jar","/app.war"]
编写完 dockerfile 执行 docker build -t jxc:0.0.2 .
然后 在该目录下 docker-compose.yml
version: '2'
services:
mysql:
image: docker.io/mysql:5.5
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=db_jxc2
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
jxc:
image: jxc:0.0.2
links:
- mysql
ports:
- "8080:80"
然后执行 docker-compose up
注意: 要正常 运行
1 要把项目下的sql 脚本 导入,mysql 映射了3306端口,普通的 mysql 客户端可以连接,
鸣谢地址
http://www.cnblogs.com/52fhy/p/5991344.html
springcloud 与 docker 微服务实战一书
更多推荐
所有评论(0)