对于想了解使用dockercompose制作一套简单的CI服务的读者,本文将是一篇不可错过的文章,我们将详细介绍如何制作docker,并且为您提供关于c#–使用docker-compose运行dock
对于想了解使用docker compose制作一套简单的CI服务的读者,本文将是一篇不可错过的文章,我们将详细介绍如何制作docker,并且为您提供关于c# – 使用docker-compose运行docker镜像、CentOS7中使用docker-compose部署服务、docker 及 docker-compose 的快速安装和简单使用、Dockerfile格式、Dockerfile示例、用docker compose部署服务、docker compose示例的有价值信息。
本文目录一览:- 使用docker compose制作一套简单的CI服务(如何制作docker)
- c# – 使用docker-compose运行docker镜像
- CentOS7中使用docker-compose部署服务
- docker 及 docker-compose 的快速安装和简单使用
- Dockerfile格式、Dockerfile示例、用docker compose部署服务、docker compose示例
使用docker compose制作一套简单的CI服务(如何制作docker)
没有什么步骤了,就只有docker-compose.yml文件,其余的交给docker环境自动生成了。
文件内容如下:
version: ''2''
networks:
prodnetwork:
driver: bridge
services:
nexus:
image: sonatype/nexus3
ports:
- 8081:8081
networks:
- prodnetwork
jenkins:
image: jenkins
ports:
- 8080:8080
networks:
- prodnetwork
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/local/bin/docker:/usr/bin/docker
- /opt/jenkins/:/var/lib/jenkins/
links:
- nexus
- gitlab
- sonar
environment:
- NEXUS_PORT=8081
- SONAR_PORT=9000
- SONAR_DB_PORT=5432
sonar:
image: sonarqube
ports:
- 9000:9000
networks:
- prodnetwork
links:
- sonardb
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://sonardb:5432/sonar
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
sonardb:
networks:
- prodnetwork
image: postgres
ports:
- 5432:5432
environment:
- POSTGRES_DB=sonar
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- /opt/postgres/data:/var/lib/postgresql/data
gitlab:
image: gitlab/gitlab-ce
restart: always
networks:
- prodnetwork
environment:
GITLAB_OMNIBUS_CONFIG: |
# external_url ''https://gitlab.example.com''
# Add any other gitlab.rb configuration here, each on its own line
ports:
- 80:80
- 443:443
- 2222:22
volumes:
- /opt/gitlab/config:/etc/gitlab
- /opt/gitlab/logs:/var/log/gitlab
- /opt/gitlab/data:/var/opt/gitlab
测试过,服务都可以起来。
c# – 使用docker-compose运行docker镜像
我在C#中使用我的简单应用程序与postgresql连接.
我想用这个应用程序创建图像,然后用docker运行.
我使用时一切正常:
$docker build
$docker run postgres
$docker run my_app
另外,当我从应用程序目录使用compose时,一切都还可以:
$docker-compose build
$docker-compose up
但有没有机会使用docker-compose为我之前建立的图像?
我想将此图像发布到我的仓库,我的团队中的其他人只需下载并运行此图像(应用程序数据库).
当我进行compose-build和next compose运行my_app时,我在连接数据库时遇到异常:
dbug: Npgsql.NpgsqlConnection[3]
opening connection to database 'POSTGRES_USER' on server 'tcp://postgres:5432'.
Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.AggregateException: One or more errors occurred. (No such device or address) ---> System.Net.Internals.socketExceptionFactory+ExtendedSocketException: No such device or address
我当前的docker-compose.yml文件:
version: '2'
services:
web:
container_name: 'postgrescoreapp'
image: 'postgrescoreapp'
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/var/www/postgrescoreapp
ports:
- "5001:5001"
depends_on:
- "postgres"
networks:
- postgrescoreapp-network
postgres:
container_name: 'postgres'
image: postgres
environment:
POSTGRES_PASSWORD: password
networks:
- postgrescoreapp-network
networks:
postgrescoreapp-network:
driver: bridge
解决方法:
您应该使用以下名称构建映像:(registryName:RegistryPort)/ imagename:version
$docker build -t myRegistry.example.com:5000/myApp:latest .
$docker build -t myRegistry.example.com:5000/myDb:latest .
现在将这些行添加到docker-compose文件中:
Myapp:
image: myRegistry.example.com:5000/myApp:latest
MyDb:
image: myRegistry.example.com:5000/myDb:latest
然后推它:
$docker push myRegistry.example.com:5000/myApp:latest
$docker push myRegistry.example.com:5000/myDb:latest
你的伙伴现在应该能够拉它
$docker pull myRegistry.example.com:5000/myApp:latest
$docker pull myRegistry.example.com:5000/myDb:latest
CentOS7中使用docker-compose部署服务
开始Java基础、架构设计、源码阅读
关注=进步,可能还会加薪哦!
之前讲解过Docker安装单个服务的系列教程,没看过的可以点击下面的链接回顾一下:
Docker学习笔记一:Docker简介与安装
MacOS安装Docker傻瓜式教程
mac系统下docker安装配置mysql详细步骤
mac系统Docker安装Redis教程
mac系统Docker安装Nginx教程
Docker的用途我在这里就不做赘述了,不懂的自己戳上面的链接学习,假如现在我们有个Springboot应用,里面用到了mysql、Redis、Nginx等服务,那现在我们要用Docker部署我们的服务,通常需要下面几步:
安装docker
使用docker安装Redis
使用docker安装Mysql
使用docker安装、配置Nginx
springboot应用打成Jar包和编写dockerfile
安装好以上服务之后,我们还要一一启动,然后再运行项目才能访问,虽然说docker有一次打包到处运行、节省存储空间和资源,应用隔离和服务器整合等优点,但是仔细看上面的部署步骤,即便我们用了docker,也还是要在docker里手动安装其他服务,现在只有redis、mysql、nginx几个服务,如果我们以后还要加ES、Mongo等等越来越多的服务,好像并没有提高很多效率,那作为“万能”的程序员,有解决方法吗?那必须有啊,下面就进入本文的重点:docker-compose。
docker-compose简介
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加docker下载仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker-ce
sudo yum install docker-ce
# 启动docker-ce
sudo systemctl start docker
# 验证
sudo docker --version
1、安装Run this command to download the latest version of Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
2、赋权Apply executable permissions to the binary:
sudo chmod +x /usr/local/bin/docker-compose
3、Optionally, install command completion for the bash and zsh shell.
4、测试(查看版本)Test the installation
docker-compose --version
用dockerfile,或者镜像定义应用程序所依赖的环境,以便在任何地方都可以直接复制。
在docker-compose.yaml中定义应用程序需要的服务,以便这些服务可以在单独的环境中一起运行。
运行docker-compose build 安装应用程序所需要的服务镜像。
运行docker-compose up -d 启动并在后台运行整个应用程序。
运行docker compose down 停止整个应用程序。
历经了一个月,终于将个人的博客发布上线了,原来准备用传统的方式先草草上线,可是对于一个对前沿技术有强迫症的开发者来说,哪怕不精通不擅长,至少要懂点皮毛,要在别人聊起的时候至少能听懂,于是果断换了docker方式部署,可部署过程中发现既然都已经开始了,索性就再为难自己一下,干脆一次性到位好了,直接用compose方式。其实人很多时候都是在“为难自己”的过程中成长,只要你勇敢的迈出第一步。
好了,废话少说,在大概的看了官方文档,又谷哥度娘了几篇相关文章,在失败了7次,解决了4个问题之后,最终如愿使用compose方式上线成功,下面就将整个过程记录下来和大家分享,所有步骤都经过本人亲测,希望对码之初的乡亲们也有帮助。
下面的common、dao、service、web模块不用多做介绍了,是个人博客项目,上面的docker-build文件夹就是使用compose方式部署的文件夹,主要包括:
Spring Boot web项目打成的jar包
jar对应的Dockerfile
compose方式的核心配置文件docker-compose.yaml
config文件夹,是将宿主机本地配置挂载到docker容器中的配置文件
data文件夹:存放的一些初始化数据或者配置
log日志文件夹
FROM java:8
#FROM maven:3.5-jdk-8
VOLUME /tmp
ADD mazhichu.jar mazhichu.jar
EXPOSE 8082
#RUN bash -c ''touch /mazhichu.jar''
ENTRYPOINT ["java","-Djava.security.egd=file:/prod/./urandom","-Dspring.profiles.active=prod", "-jar","/mazhichu.jar"]
FROM java:8:基础镜像环境 JDK1.8
VOLUME /tmp:指定了挂载目录
ADD mazhichu.jar mazhichu.jar:把指定的 jar 包拷贝到 Docker 容器中并命名为 mazhichu.jar
EXPOSE 8082:运行监听端口
RUN bash -c ''touch /mazhichu.jar'':等同于上面的拷贝jar文件到容器
ENTRYPOINT...:启动jar的命令并指定运行环境等参数
version: ''3''
services:
nginx:
container_name: nginx
image: nginx:1.14
environment:
- TZ=Asia/Shanghai
ports:
- "80:80"
volumes:
- ./config/nginx/conf.d:/etc/nginx/conf.d
# - ./data/nginx/:/usr/share/nginx/html/
- ./log/nginx/:/var/log/nginx/
restart: always
redis:
container_name: redis
image: redis:5.0.7
environment:
- TZ=Asia/Shanghai
ports:
- "6379:6379"
volumes:
- ./config/redis/redis.conf:/usr/local/etc/redis/redis.conf
- ./data/redis/:/data/
- ./log/redis/:/var/log/redis/
command: redis-server /usr/local/etc/redis/redis.conf
restart: always
mysql:
container_name: mysql
image: mysql:8.0.18
environment:
TZ: Asia/Shanghai
MYSQL_DATABASE: mazhichu
MYSQL_ROOT_PASSWORD: Moore@2019
MYSQL_ROOT_HOST: ''%''
ports:
- "3306:3306"
volumes:
- ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- ./data/mysql/:/var/lib/mysql/
- ./data/init/:/docker-entrypoint-initdb.d/
- ./log/mysql/:/var/log/mysql/
command: [
''--character-set-server=utf8mb4'',
''--collation-server=utf8mb4_unicode_ci'',
#这行代码解决无法访问的问题
''--default-authentication-plugin=mysql_native_password''
]
security_opt:
- seccomp:unconfined
restart: always
mazhichu:
container_name: mazhichu
build:
context: .
dockerfile: Dockerfile
environment:
TZ: Asia/Shanghai
spring.datasource.host: mysql
spring.redis.host: redis
expose:
- "8082"
depends_on:
- nginx
- redis
- mysql
links:
- "mysql:mysql"
restart: always
# networks:
# - my-network
# command: mvn clean spring-boot:run -Dspring-boot.run.profiles=prod
version: ''3'': 表示使用第三代语法来构建 docker-compose.yaml 文件。
services: 用来表示 compose 需要启动的服务,上面的配置文件中有四个服务分别为:nginx、redis、mysql还有我的博客项目mazhichu(码之初)。
Image:指定下载镜像版本
container_name: 指定容器名称
environment: 此节点下的信息会当作环境变量传入容器,例如mysql 服务配置了数据库、密码和权限信息。
ports: 表示对外开放的端口
volumes: 加载本地目录下的配置文件到容器目标地址下
restart: always 表示如果服务启动不成功会一直尝试。
depends_on:配置依赖服务,表示需要先启动 depends_on 下面的服务后,再启动本服务。
links:与depends_on相对应,depends_on控制启动顺序,links控制容器连接问题。值为"服务名:别名"或者直接使用服务名
command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker: 表示以这个命令来启动项目,-Dspring-boot.run.profiles=prodr表示使用 application-prod.yml文件配置信息进行启动。
networks:加入指定网络,我这儿没用到。
my.cnf:mysql的配置,注意改变加密方式那个位置
[client]
default-character-set=utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 数据库唯一 ID,主从的标识号绝对不能重复。
server-id = 1
# 开启 bin-log,并指定文件目录和文件名前缀
log-bin=/var/log/mysql/binlog
# bin-log 日志文件格式,设置为 MIXED 可以防止主键重复。
binlog_format = mixed
# 改变加密方式,远程连接(这个很重要)
default_authentication_plugin=mysql_native_password
# 解决远程访问慢问题
skip-name-resolve
[mysql]
default-character-set=utf8mb4
mzc.conf:主要配置ip域名映射,注意proxy_pass那儿的码之初是docker-compose.yaml文件中指定的服务名。
upstream mazhichu {
server mazhichu:8082;
}
server {
listen 80;
server_name www.mazhichu.cn;
charset utf-8;
location / {
proxy_pass http://mazhichu;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
redis.conf:我这儿其实就是redis.conf的文件,只是改变了里面的连接redis的密码。
五、详细步骤
1、将docker-build文件夹上传到centos指定目录中,使用命令:
scp -r docker-build mzc:/usr/local/server
友情提示:
直接使用scp拷贝文件提示无权限的时候,需要加上一个-r就可以了。
mzc:/usr/local/server:这儿我直接使用的远程服务器别名,是不是很方便,感兴趣的可以看我这篇公众号:ssh使用别名免密登录远程服务器
2、给log文件夹加上所有权限,然后重启一下docker服务
3、使用docker-compose build构建服务
4、使用docker-compose up -d 启动并在后台运行yaml中定义的所有服务
docker-compose --verbose:输出更多的调试信息
docker-compose --version:查看compose的版本
docker-compose -f --file FILE:使用特定的compose模板文件,默认为docker-compose.yaml。
docker-compose -p --project-name NAME 指定项目名称,默认使用目录名称。
docker-compose build:构建或重建服务
docker-compose ps:查看已经启动的服务状态
docker-compose kill:停止某个服务、杀掉容器
docker-compose logs:可以查看某个服务的log、显示容器的输出内容
docker-compose port:打印绑定的public port(开放端口)
docker-compose pull:拉取服务镜像
docker-compose up:启动yml定义的所有服务
docker-compose stop:停止yml中定义的所有服务
docker-compose start:启动被停止的yml中的所有服务
docker-compose kill:强行停止yml中定义的所有服务
docker-compose rm:删除yml中定义的所有服务
docker-compose restart:重启yml中定义的所有服务
docker-compose scale:设置服务的容器数目
docker-compose run:运行一个一次性命令


码之初
一个走心的技术公众号

Java基础|架构设计|源码阅读|面试
如果您觉得本文不错,有参考价值,
麻烦您点一下右下角的“在看”,
或者转发给有需要的人,
这就是对我最大的支持,谢谢!
本文分享自微信公众号 - 码之初(ma_zhichu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
docker 及 docker-compose 的快速安装和简单使用
本篇将使用 DaoCloud 源在 Ubuntu 上简单快速安装 docker 及 docker-compose
并添加了通过 Dockerfile 及 docker-compose.yml 使用 nginx 的示例
本篇文章所用系统信息如下Distributor ID: Ubuntu Description: Ubuntu 16.04.1 LTS Release: 16.04
docker 的安装及使用
简单介绍
docker 是一个开源的软件部署解决方案
docker 也是轻量级的应用容器框架
docker 可以打包、发布、运行任何的应用
安装
curl -sSL https://get.daocloud.io/docker | sh
安装后将会自动重启
卸载
sudo apt-get remove docker docker-engine
rm -fr /var/lib/docker/
配置加速器
下面是我的配置,实际使用需要根据自己的账号去查看自己的地址
- DaoCloud
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ced808ab.m.daocloud.io
sudo systemctl restart docker.service
- 阿里云
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-''EOF''
{
"registry-mirrors": ["https://dist7hw1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
基础命令
- 查看版本:
docker -v
//文章使用版本:Docker version 18.06.0-ce, build 0ffa825 - 查看镜像:
docker images
- 查看容器:
docker ps
- 启动 docker 服务:
sudo service docker start
- 停止 docker 服务:
sudo service docker stop
- 重启 docker 服务:
sudo service docker restart
通过 Dockerfile 使用 nginx
通过下面的一个脚本可以简单快速的创建一个镜像并运行起来
大概看下应该就可以大概明白镜像的基本使用了
echo ''0.创建测试目录及代码''
mkdir dockerfiletest
cd dockerfiletest
mkdir dist
echo ''hello world''>./dist/index.html
echo ''1.创建Dockerfile''
echo ''
From daocloud.io/library/nginx:1.13.0-alpine
COPY dist/ /usr/share/nginx/html/
''>./Dockerfile
echo ''2.构建镜像''
docker build -t dockerfiletest .
echo ''3.运行镜像''
docker run -p 3344:80 dockerfiletest
下面分步拆解下
1.在项目目录中添加 Dockerfile 文件
详细请参考:https://hub.daocloud.io/repos...
html 的简单部署
From daocloud.io/library/nginx:1.13.0-alpine
# 将发布目录的文件拷贝到镜像中
COPY dist/ /usr/share/nginx/html/
若要使用自己的配置脚本,比如 vue 的配置,可以将自己的配置文件复制到容器中
From daocloud.io/library/nginx:1.13.0-alpine
# 删除镜像中 nginx 的默认配置
RUN rm /etc/nginx/conf.d/default.conf
# 复制 default.conf 到镜像中
ADD default.conf /etc/nginx/conf.d/
# 将发布目录的文件拷贝到镜像中
COPY dist/ /usr/share/nginx/html/
nginx 中 vue history 模式的配置 如下,可参考
server {
listen 80;
location / {
root /usr/share/nginx/html/;
index index.html;
try_files $uri $uri/ /index.html;
}
}
若是将/usr/share/nginx/html/
和/etc/nginx/conf.d/
挂载到本地,这样应该能够灵活使用 docker 安装的 nginx 了(未实践过)
2.构建镜像
构建参数说明参考:http://www.runoob.com/docker/...
docker build -t docker-nginx-test .
3.运行镜像
--name 服务名
-d 后台运行
-p 暴露端口:nginx 端口
docker-nginx-test 镜像名/IMAGE ID
docker run --name dockertest -d -p 4455:80 docker-nginx-test
4.测试访问
root@ubuntu:~# curl http://localhost:4455
hello world
现在,可以通过 IP+端口的形式在外网访问站点了,但在实际使用肯定还需要绑定域名等一些操作
最简单的是我认为是使用 nginx 去做代理
目前我们公司使用的 traefik ,最爽的莫过于 https 的支持,可以了解一下
docker-compose 的安装及使用
简单介绍
Docker Compose 是一个用来定义和运行复杂应用的 Docker 工具。
使用 Docker Compose 不再需要使用 shell 脚本来启动容器。(通过 docker-compose.yml 配置)
安装
可以通过修改 URL 中的版本,自定义您需要的版本。
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
卸载
sudo rm /usr/local/bin/docker-compose
基础命令
需要在 docker-compose.yml 所在文件夹中执行命令
使用 docker-compose 部署项目的简单步骤
- 停止现有 docker-compose 中的容器:
docker-compose down
- 重新拉取镜像:
docker-compose pull
- 后台启动 docker-compose 中的容器:
docker-compose up -d
通过 docker-compose.yml 部署应用
我将上面所创建的镜像推送到了阿里云,在此使用它
1.新建 docker-compose.yml 文件
通过以下配置,在运行后可以创建两个站点(只为演示)
version: "3"
services:
web1:
image: registry.cn-hangzhou.aliyuncs.com/yimo_public/docker-nginx-test:latest
ports:
- "4466:80"
web2:
image: registry.cn-hangzhou.aliyuncs.com/yimo_public/docker-nginx-test:latest
ports:
- "4477:80"
此处只是简单演示写法,说明 docker-compose 的方便
2.构建完成,后台运行镜像
docker-compose up -d
运行后就可以使用 ip+port 访问这两个站点了
3.镜像更新重新部署
docker-compose down
docker-compose pull
docker-compose up -d
相关文章
- docker 文档:https://docs.docker.com/get-s...
- docker-compose 文档:https://docs.docker.com/compo...
- docker-compose 仓库:https://github.com/docker/com...
- daocloud 源地址 :https://get.daocloud.io/#inst...
- Docker 通过 Nginx 镜像部署 Vue 项目:https://blog.csdn.net/jason_j...
- DaoClould https://hub.daocloud.io/repos...
Dockerfile格式、Dockerfile示例、用docker compose部署服务、docker compose示例
25.13/25.14 Dockerfile格式
25.15/25.16 Dockerfile示例(安装nginx)
25.17 用docker compose部署服务
25.18 docker compose示例
一、Dockerfile创建镜像 – Dockerfile格式
1. FROM //指定基于哪个基础镜像,在此镜像的基础上做操作,本地docker images列出来的镜像 格式 FROM <image> 或者 FROM <image>:<tag>, 比如 FROM centos FROM centos:latest 2. MAINTAINER //指定作者信息,可有可无 格式 MAINTAIN <name> ,比如 MAINTAINER aming aming@aminglinux.com 3. RUN //镜像操作指令 格式为 RUN <command> 或者 RUN ["executable", "param1", "param2"],比如 RUN yum install httpd RUN ["/bin/bash", "-c", "echo hello"] 4. CMD // 三种格式: CMD ["executable", "param1", "param2"] CMD command param1 param2 CMD ["param1", "param2"] RUN和CMD看起来挺像,但是CMD用来指定容器启动时用到的命令,只能有一条。比如 CMD ["/bin/bash", "/usr/local/nginx/sbin/nginx", "-c", "/usr/local/nginx/conf/nginx.conf"] 5. EXPOSE 暴露端口的 格式为 EXPOSE <port> [<port>...] , 比如 EXPOSE 22 80 8443 这个用来指定要映射出去的端口,比如容器内部我们启动了sshd和nginx,所以我们需要把22和80端口暴漏出去。这个需要配合-P(大写)来工作,也就是说在启动容器时,需要加上-P,让它自动分配。如果想指定具体的端口,也可以使用-p(小写)来指定。 6. ENV 定义环境变量的 格式 ENV <key> <value>, 比如 ENV PATH /usr/local/mysql/bin:$PATH 它主要是为后续的RUN指令提供一个环境变量,我们也可以定义一些自定义的变量 ENV MYSQL_version 5.6 7. ADD 格式 add <src> <dest> 将本地的一个文件或目录拷贝到容器的某个目录里。 其中src为Dockerfile所在目录的相对路径,它也可以是一个url。比如 ADD <conf/vhosts> </usr/local/nginx/conf> 8. COPY 格式同add 使用方法和add一样,不同的是,它不支持url远程下载 9. ENTRYPOINT(常用) 格式类似CMD 容器启动时要执行的命令,它和CMD很像,也是只有一条生效,如果写多个只有最后一条有效。和CMD不同是: CMD 是可以被 docker run 指令覆盖的,而ENTRYPOINT不能覆盖。比如,容器名字为aming 我们在Dockerfile中指定如下CMD: CMD ["/bin/echo", "test"] 启动容器的命令是 docker run aming 这样会输出 test 假如启动容器的命令是 docker run -it aming /bin/bash 什么都不会输出 ENTRYPOINT不会被覆盖,而且会比CMD或者docker run指定的命令要靠前执行 ENTRYPOINT ["echo", "test"] docker run -it aming 123 则会输出 test 123 ,这相当于要执行命令 echo test 123 10. VOLUME 用来指定挂载点 格式 VOLUME ["/data"] 创建一个可以从本地主机或其他容器挂载的挂载点。 11. USER 格式 USER daemon 指定运行容器的用户 12. WORKDIR 格式 WORKDIR /path/to/workdir 为后续的RUN、CMD或者ENTRYPOINT指定工作目录
二、Dockerfile示例(安装nginx)
vim Dockerfile //内容如下
## Set the base image to CentOS 基于centos镜像 FROM centos # File Author / Maintainer 作者信息 MAINTAINER tobe tobe@tobelinux.com # Install necessary tools 安装必要的依赖包 RUN yum install -y pcre-devel wget net-tools gcc zlib zlib-devel make openssl-devel # Install Nginx 安装nginx ADD http://nginx.org/download/nginx-1.8.0.tar.gz . #下载nginx的源码包,在根下 RUN tar zxvf nginx-1.8.0.tar.gz #解压 RUN mkdir -p /usr/local/nginx #创建目录 RUN cd nginx-1.8.0 && ./configure --prefix=/usr/local/nginx && make && make install #编译安装 RUN rm -fv /usr/local/nginx/conf/nginx.conf #把系统自带的nginx删掉 ADD http://www.apelearn.com/study_v2/.nginx_conf /usr/local/nginx/conf/nginx.conf #使用ADD下载配置文件到/usr/local/nginx/conf/nginx.conf # Expose ports EXPOSE 80 #80端口暴露出来 # Set the default command to execute when creating a new container 容器启动时要执行的默认命令 ENTRYPOINT /usr/local/nginx/sbin/nginx && tail -f /etc/passwd #tail -f /etc/passwd加上这个命令是为了让容器一直运行着
创建镜像:
docker build -t centos_nginx . #使用容器,-t指定新的容器名字, . 是路径,去找Dockerfile
出现此报错说明容器无法连接网络,因为之前使用pipework对网络做了更改,需要重启docker服务,之前把ens33和br0做了交换,容器还在使用ens33的网络,ens33已经无法联网了,重启docker让它自动绑定br0,重启完成后,可以进入一个容器中ping外网测试。
docker images //可以看到新建的镜像
docker run -itd -p 81:80 centos_nginx bash 映射81端口 docker exec -it 92a47 bash
curl 127.0.0.1:81 可以正常访问,已经设置成功
三、用Docker compose部署服务
docker compose可以方便我们快捷高效地管理容器的启动、停止、重启等操作,它类似于linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什么镜像、数据卷、网络模式、监听端口等信息。我们可以在一个compose文件中定义一个多容器的应用(比如jumpserver),然后通过该compose来启动这个应用。
安装compose方法如下:
curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod 755 /usr/local/bin/docker-compose docker-compose version 查看版本信息 Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+),1.6.0之后就是2版本了。Version 2支持更多的指令。YAML语法,Version 1没有声明版本默认是"version 1"。Version 1将来会被弃用。
四、用Docker compose部署服务 – 示例
vim docker-compose.yml //内容到https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/25docker/docker-compose.yml 查看
version: "2" #2版本 services: #容器、镜像相关操作 app1: #容器名字:app1 image: centos_nginx # 对应的镜像 ports: #映射端口 - "8080:80" networks: #使用的网络,net1在下面定义,不定义的话默认是bridge,这里不支持pipework,需要使用脚本 - "net1" volumes: # 即-v选项,目录映射,本地的和容器的data目录,只写data是数据卷 - /data/:/data app2: image: centos_with_nettool networks: - "net2" volumes: - /data/:/data1 entrypoint: tail -f /etc/passwd networks: net1: driver: bridge net2: driver: bridge docker-compose up -d 可以启动app1和app2两个容器,-d是放到后台
docker-compose --help docker-compose ps/down/stop/start/rm docker-compose stop 停掉两个容器 docker-compose rm -f 把停掉的两个容器移除 关于docker-compose语法的参考文档 http://www.web3.xin/index/article/182.html
今天关于使用docker compose制作一套简单的CI服务和如何制作docker的介绍到此结束,谢谢您的阅读,有关c# – 使用docker-compose运行docker镜像、CentOS7中使用docker-compose部署服务、docker 及 docker-compose 的快速安装和简单使用、Dockerfile格式、Dockerfile示例、用docker compose部署服务、docker compose示例等更多相关知识的信息可以在本站进行查询。
本文标签: