概念:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
镜像是一种文件存储方式,镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。
组成:程序代码、基础系统、依赖关系的软件包、系统库、工具
步骤:
1、下载源代码 ,在windows里下载,然后上传linux
docker/getting-started: Getting started with Docker (github.com)
2、解压app
[root@lb ~]# unzip getting-started-master.zip
3、进入app目录,新建一个新的Dockerfile
[root@lb getting-started-master]# cd app
[root@lb app]#
vim Dockerfile
FROM node:12-alpine #from 指定基础镜像
WORKDIR /app # workdir 指定工作目录(进入容器的时候)
COPY .. # 从上下文目录中复制文件或者目录到容器里指定路径
RUN yan install --production # 在容器里运行命令
CMD ["node","src/index.js"] # 容器启动的时候运行的第一个命令
4、制作镜像
RUN yum install nginx -y
RUN mkdir /feng
RUN touch /feng/sanchuang.txt
RUN yum install nginx -y && mkdir /feng && touch /feng/sanchuang.txt
RUN yum install nginx -y \
&& mkdir /feng \
&& touch /feng/sanchuang.txt
可以减少镜像文件的层次的数量
[root@lb app]# docker build -t getting-started . (getting-started 是制作容器时容器的名字)
[root@lb app]# docker build -t getting-started .
Sending build context to Docker daemon 4.654MB
Step 1/5 : FROM node:12-alpine
---> bb6d28039b8c
Step 2/5 : WORKDIR /app
---> Running in 3ff2e10f4b9d
Removing intermediate container 3ff2e10f4b9d
---> e8354986e546
Step 3/5 : COPY . .
---> ef09dde30f24
Step 4/5 : RUN yarn install --production
---> Running in 924fd99647b8
yarn install v1.22.18
[1/4] Resolving packages...
warning Resolution field "ansi-regex@5.0.1" is incompatible with requested version "ansi-regex@^2.0.0"
warning Resolution field "ansi-regex@5.0.1" is incompatible with requested version "ansi-regex@^3.0.0"
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
Done in 41.47s.
Removing intermediate container 924fd99647b8
---> 85578d5a74fc
Step 5/5 : CMD ["node","src/index.js"]
---> Running in de6bc30db700
Removing intermediate container de6bc30db700
---> 395db1cc46ef
Successfully built 395db1cc46ef
Successfully tagged getting-started:latest
5、查看制作的镜像,getting-starting
[root@lb app]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
getting-started latest 395db1cc46ef 2 minutes ago 182MB
<none> <none> ea54512ab00a 7 minutes ago 91MB
redis latest 3e42dd4e79c7 2 weeks ago 117MB
nginx latest b692a91e4e15 2 weeks ago 142MB
mysql 5.7.39 3147495b3a5c 3 weeks ago 431MB
node 12-alpine bb6d28039b8c 4 months ago 91MB
hello-world latest feb5d9fea6a5 11 months ago 13.3kB
jcdemo/flaskapp latest 4f7a2cc79052 3 years ago 88.7MB
[root@lb app]#
启动容器
[root@lb app]# docker run -dp 3000:3000 getting-started
60a4a98b163dc60c6c906ff1a1cf53dd0736989782f3d6eee0cffcc222702d57
[root@lb app]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60a4a98b163d getting-started "docker-entrypoint.s…" 22 seconds ago Up 21 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp serene_moser
30cbcdc3e3d2 nginx "/docker-entrypoint.…" 24 hours ago Up 2 hours 0.0.0.0:6654->80/tcp, :::6654->80/tcp wangdan
[root@lb app]#
6、浏览器访问ip地址加端口,查看效果,,页面为index.js 的效果