准备工作
-
到Docker官网下载并安装Docker客户端。
安装成功后,在终端执行
docker --version
,成功看见下图信息说明docker安装成功。
-
注册Docker账号
-
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。
-
Azure中国镜像(https://dockerhub.azk8s.cn)
-
七牛云加速(https://reg-mirror.qiniu.com)
设置成功之后,再在终端上执行
docker info
来检查加速镜像是否生效。
-
到这里Docker的准备工作就结束了。
Docker的使用
在使用Docker之前,我们先搞懂什么是Docker?它又有什么特点?和传统的虚拟机比又有什么区别?那接下来就一一回答上面的问题。
-
什么是Docker?
- Docker是一个开源的应用容器引擎,基于go语言开发。
- Build,Ship and Run Any App, Anywhere 一次封装,到处执行。
- 基于linux的高效、敏捷、轻量级的容器(轻量虚拟)方案。
-
特点
- 高效的利用系统资源
- 快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
-
对比传统虚拟机总结
-
核心概念
镜像
,容器
,仓库
- 镜像(Image):面向Docker的只读模版
- 容器(Container):镜像的运行实例
- 仓库(Registry):存储镜像的服务器
-
Docker使用:以构建一个Nginx服务器为例。
-
拉取nginx官方镜像
docker pull nginx
-
查看镜像是否安装成功
docker images
-
创建www目录里面放一个index.html
mkdir www echo 'hello docker' >> www/index.html
-
启动镜像:将www目录映射到nginx的项目位置,并将虚拟机的80端口映射到8080端口。
命令解释:
- docker run: 启动容器
- –name:容器名称
- -d: 后台运行
- -v:将宿主机目录或者文件挂在到容器中对应的目录或者文件
nginx在docker容器中相关配置文件目录分别是:
- 日志位置:/var/log/nginx/
- 配置文件位置:/etc/nginx/
- 项目位置:/usr/share/nginx/html
docker run -p 8080:80 -v $PWD/www:/usr/share/nginx/html -d nginx
从图片中可以看出来,执行命令之后,会打印出容器的uuid。说明nginx容器已经在后台运行了。然后到浏览器中输入
http://127.0.0.1:8080
,成功显示hello docker
。
-
删除镜像
docker rmi nginx
-
查看容器
docker ps -a
-
停止容器
docker stop e05
-
重新启动容器
docker start e05
-
建一个伪终端,进入容器内部看看www是不是在/usr/share/nginx/html里面。
docker exec -it e05 /bin/bash
从图片中我们可以看出,执行完命令进入了容器内部并且确实在项目位置看见了index.html。-
删除容器
docker rm e05
-
-
定制镜像:以定制一个nodejs镜像为例。
-
拉取node镜像
docker pull node
-
创建node-server目录并初始化一个项目。
mkdir node-server cd node-server npm init -y
-
在node-server.js创建app.js
const http = require('http'); const server = http.createServer((req, res) => { res.end('hello nodeJS'); }); server.listen(3000, () => { console.log('3000 端口已启动!'); })
-
创建Dockerfile。
命令解释:
FORM : 从XX镜像开始构建镜像
COPY <源路径1> <源路径2>:将上下文目录中文件添加到容器里指定路径
ADD <源路径1> <源路径2>: (同COPY)将上下文目录中文件添加到容器里指定路径
WORKDIR:指定工作目录
RUN npm install:执行
npm install
EXPOSE 3000: 暴露
3000
端口CMD:类似于RUN指令,用于运行程序
CMD <shell 命令> CMD ["<可执行文件或命令>","<param1>","<param2>",...] CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
node在Docker容器中的目录位置:
FORM node:latest ADD . /app/ WORKDIR /app/ RUN npm install EXPOSE 3000 CMD ["node", "app.js"]
-
定制镜像
docker build -t nodeserver .
6. 查看镜像定制情况docker run -p 3000:3000 nodeserver
3000端口启动,浏览器输入
http:127.0.0.1:3000
,也成功的显示了hello nodeJS
。到这里我们一个nodejs的镜像也完成了。
-
docker-compose的使用
Docker-Compose是用于定义和运行多个容器Docker应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
docker安装完成就已经包含了docker-componse,可以在终端输入docker-compose --version
查看docker-compose
的版本。
Compose使用的三个步骤:
- 使用Dockerfile定义应用程序的环境
- 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
- 最后,执行docker-compose up命令来启动并运行整个应用程序
那我们就动手实现一个compose吧!
-
首先创建
compose-demo
目录和Dockerfile
文件,这一步你可以手动创建,也可以用命令创建。mkdir compose-demo && cd compose-demo touch Dockerfile
-
将
nginx镜像
的内容写入Dockerfile中。FROM nginx:latest RUN echo 'Hello docker' > /usr/share/nginx/html/index.html
-
创建
docker-compose.yml
文件touch docker-compose.yml
-
docker-compose
中创建两个容器一个是当前目录的Dockerfile
创建的容器,还有一个是上文创建的nodeserver
镜像。# yaml 配置 version: '3' services: nginx: build: . ports: - "8080:80" node: image: "nodeserver" ports: - "3000:3000"
-
启动应用程序
docker-compose up
看到上图信息就说明docker-compose
启动成功了。
然后在浏览器分别输入http://127.0.0.1:8080
和http://127.0.0.1:3000
。也成功了看见了相应的页面。
docker简单的使用到这里就结束了。想要了解进阶版的,敬请期待。