docker
1. dokcer概念
镜像:docker中的概念,将项目以镜像的方式发布到docker中,换言之, 镜像就是一个项目。
容器:镜像可以创建无数个容器,每个容器是一个进程,各个容器之间相互独立,互相隔离(隔离是指用一种方式来满足文件系统的隔离,每个容器只能访问文件系统中属于自己的区域,区域可以看做是一个专属于当前容器的小型的文件系统)。也正因为如此,使用docker ps
只能查看所有正在运行的容器信息。
2. Dokcerfile
2.1 build
- 创建文件夹:
/usr/local/docker-projects/
:专门用来存放发布的docker项目。 - 新建文件夹:
/docker-demo
,用idea生成一个简单的web项目,我这里项目名是docker-demo-0.0.1-SNAPSHOT.jar,放在此文件夹下。 - 新建Dockerfile文件:
FROM openjdk:8 #依赖java8的jdk镜像
MAINTAINER zp
ADD docker-demo-0.0.1-SNAPSHOT.jar docker-demo.jar
EXPOSE 8080 # 和application.yml中的server port一致
ENTRYPOINT ["java","-jar","/docker-demo.jar"]
- 构建镜像
进入/usr/local/docker-projects/docker-demo
路径执行命令:
docker build -t docker-demo:v1 .
.
是告诉docker build命令把当前文件夹下所有的内容都打入镜像内。-t
是 tag的缩写。
5、docker images
查看所有镜像。
2.2 run
docker run -d -p 2001:8080 docker-demo:v1
2.3 修改镜像
在需要定制容器功能时,比如修改配置文件,可以进入容器内部修改相应文件然后提交镜像,最后可以提交到docker-hub。
2.2 高级
- 多阶段构建镜像:可以把多个镜像集成在一个镜像中,在一个镜像中实现多种功能。
FROM jrottenberg/ffmpeg:3.3-alpine
FROM openjdk:8
MAINTAINER zp
WORKDIR /video/app
COPY --from=0 / /
COPY hcnet /home/opt/hcnet
#COPY ../app/application.yml
#ADD ../app/*.jar video.jar
ENTRYPOINT ["java","-jar","video-0.0.1-SNAPSHOT.jar","--spring.config.location=application.yml"]
EXPOSE 8003
3. docker-compose
docker-compose是一个存放build 和 run命令的文件,可以一次构建多个镜像并启动多个容器。其中,build需要指定Dockrfile或从hub拉取镜像,run可以配置环境变量、卷映射、端口等等,可以这样理解,在run的时候添加的命令参数都可以写到docker-compose文件中,除此之外,docker-compose还可以指定各容器的依赖关系以控制启动顺序。通过 -f 可以指定特定的docker-compose.yml文件启动。
docker-compose-hub.yml
是从docker-hub上拉取。没有build镜像这一过程。
version: "3"
services:
web:
image: zzpp/video:v5
container_name: video
ports:
- 8003:8003
volumes:
- ./app:/video/app
environment:
TZ: Asia/Shanghai
restart: unless-stopped
depends_on:
- nhf
nhf:
image: zzpp/nginx-http-flv:v6
container_name: nhf
ports:
- 1935:1935
- 9000:9000
restart: unless-stopped
docker-compose-hub.yml
是从本地路径下的Dockerfile下build镜像。
version: "3"
services:
web:
image: zzpp/video
build:
context: ./deploy
dockerfile: dockerfile
container_name: video
ports:
- 8003:8003
volumes:
- ./app:/video/app
environment:
TZ: Asia/Shanghai
restart: unless-stopped
depends_on:
- nhf
nhf:
image: zzpp/nhf
build:
context: ../nginx-http-flv/deploy
dockerfile: dockerfile
container_name: nhf
ports:
- 1935:1935
- 9000:9000
restart: unless-stopped