docker compose安装与常用命令介绍 及使用docker-compose运行一个进销存管理系统
使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
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和参数,例如:
[code]build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1
context 为路径
dockerfile 为需要替换默认docker-compose的文件名
args 为构建(build)过程中的环境变量,用于替换dockerfile里定义的ARG参数,容器中不可用
例如
dockfile中
[code]ARG buildno ARG password RUN echo "Build number: $buildno" RUN script-requiring-password.sh "$password"
docker-compose.yml
[code]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
[code]volumes: - /var/lib/mysql - cache/:/tmp/cache - ~/configs:/etc/configs/:ro
volumes_from
从另一个服务或容器挂载卷。可指定只读(ro)或读写(rw),默认是读写(rw)。同docker run --volumes-from
例子
[code]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项目
[code] 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
[code] 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 客户端可以连接,
鸣谢地址
https://www.geek-share.com/detail/2688234080.html
springcloud 与 docker 微服务实战一书
阅读更多
- Docker安装使用及常用命令
- Git的初次使用 ; Git常用命令查询 ; Git push ; Git pull 2011-12-16 17:32 在介绍安装和简单使用前,先看一下百度百科中的简介吧: ———————————
- docker的安装使用及常用命令大全
- Docker介绍与安装,常用命令
- [置顶] docker的安装使用及常用命令大全
- docker-compose介绍及常用命令
- Git的初次使用 ; Git常用命令查询 ; Git push ; Git pull 2011-12-16 17:32 在介绍安装和简单使用前,先看一下百度百科中的简介吧: ———————————
- Docker安装教程Centos7和Docker基础使用常用命令
- linux 下运行一个使用<math.h>库的.c文件时的命令
- Oracle: 一、Oracle简介,安装,基本使用,建表增删改查,数据类型及常用命令
- RHCE课程-RH033Linux基础笔记二之安装LINUX及常用命令介绍
- Linux--软件安装+常用命令--1:Ubuntu Server 12.04 安装手记 + Ubuntu 12.04 菜鸟完全使用教程PDF
- 独立svn服务器安装与常用命令介绍
- Synplify 使用过程中最常用的选项及命令的介绍
- 介绍一个在线的Linux,没有安装Linux或者虚拟机不喜欢用的童鞋可以简单的用这个jslinux测试各种命令
- 7z介绍、7z命令在linux的安装和使用、7z移植到嵌入式linux的系列专题汇总
- 在Run窗口中敲入命令以使用另外一个用户来运行某个程序
- Synplify 使用过程中最常用的选项及命令的介绍