本文概要和目录
前面我们完成了linux服务器安装,现在 我们来学习 docker 环境安装和基础使用
安装Docker
- Docker 是一个开源的应用容器引擎,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。而且各种环境的配置都是隔离简单的不需要你花费大量的时间来整环境问题
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
在 Newegg 我们在产线环境下,大规模的应用都是Docker支撑起来
这个应该是非常非常的简单的了,这里不详细的说明了,只是列举一个大概流程和步骤,其中最推荐的是使用官方的脚本进行一键安装
curl -sSL https://get.daocloud.io/docker | sh
复制代码
对于前端同学来说对docker之类的东西 ,并不少特别的熟悉,这里我们来介绍一下,主要的内容来自 阮一峰老师的docker 教程,
如果有需要快速上手的请看下面的部分,如果你不需要可以点击区阮老师的博客学习
Docker基础知识扫盲
理论知识
- image 文件
Docker 把应用程序及其依赖,打包在 image 文件(这个文件是个二进制文件)里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。实际开发中,一个 image 文件往往通过继承另一个 image 文件
# 列出本机的所有 image 文件。
$ docker image ls
# 删除 image 文件
$ docker image rm [imageName]
# 依据本地的Dockerfile文件生成一个自己的image
$ docker image build -t yourImageName .
复制代码
- container 容器
上面的我们说过了 image 是个二进制文件,而container 是 让这些容器运行的盒子
下面是几个常用的命令
# 查看运行中的容器
$ docker container ls
# 查看运行中的容器 ( 所有的 )
$ docker container ls --all
# 运行container
$ docker container run yourImageName
# 后台运行 并且指定端口
$ docker container run --name=gitlab-runner-ci -d -p 【容器内的端口】3002:3002【需要映射到 宿主机器的端口】 gitlab-runner-ci-test
# 进入容器运行的bash 命令行
$ docker container run -it yourImageName bash
# 杀死 终止 运行中的容器
$ docker container kill [containerID]
# 移除 容器
$ docker container rm [containerID]
复制代码
实际操作
上面 我们从理论上学习了容器,接下来我们从实践出发
- 例子1: 从docker-hub 拉去一个容器 并且 运行它,
docker-hub 类似github 里面包含了非常多的docker-image 你也可以上传自己的docker-image 供别人下载使用
# 或者 docker image pull hello-world 因为官方的image 都是在library 中
$ docker image pull library/hello-world
# 查看是否拉成功
$ docker image ls
# 运行 然后你就看到了输出,并且容器自动停止了 (容器可以设置自动停止或者不停止)
$ docker container run hello-world
复制代码
- 从docker-hub 拉一个容器 并且 运行 制作 自己的image 并且发布到docker-hub
这一步有点超纲 建议你看下面的image构建教程之后回过头来看 这个例子
第一步 是在docker-hub 注册一个自己的账号 ( 注册账号怎么简单的事情不用教了哈 )
第二步 在自己本地的 登录
$ docker login -u nothid0232【你的dockerhub名】
# 提交被拒绝
root@VM-0-14-centos ~]# docker push myapp:1.0
The push refers to repository [docker.io/library/mycentos]
99b9cbc97f40: Preparing
abb030d27363: Preparing
2653d992f4ef: Preparing
denied: requested access to the resource is denied
[root@VM-0-14-centos ~]
# 镜像命名和版本信息未注意
# docker [用户名]/[镜像名]:版本号
#先修改标签
[root@VM-0-14-centos dockerfile]# docker tag 7a63efdb8e59 chenyu199702/mycentos:3.0
# 再次提交,由于是外网上传比较慢
[root@VM-0-14-centos dockerfile]# docker push chenyu199702/mycentos:3.0
99b9cbc97f40: Pushing 2.692MB/29.46MB
abb030d27363: Pushing 549.9kB/68.07MB
2653d992f4ef: Pushing 4.914MB/209.3MB
# 然后登录你的dockerhub就能看到它了
复制代码
- 制作自己的image
首先我们用前端技术栈举例子 ,我们在本地创建目录,然后init 一个node项目(使用koa做一个最贱的http-server)
mkdir mapp & cd ./mapp
npm init
npm install koa
复制代码
然后 新建启动文件 main.js内容如下
const Koa = require('koa');
const app = new Koa();
// response
app.use(ctx => {
ctx.body = 'Hello Koa';
});
app.listen(3000);
复制代码
最后 新建docker相关文件
.dockerignore 忽略一些不需要的包
.git
node_modules
npm-debug.log
复制代码
Dockerfile 文件
# 该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node。
FROM node:8.4
# 将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录
COPY . /app
# 指定接下来的工作路径为/app。
WORKDIR /app
# 在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。
RUN npm install --registry=https://registry.npm.taobao.org
# 将容器 3000 端口暴露出来, 允许外部连接这个端口。
EXPOSE 3000
复制代码
接下来我们构建启动容器,进入它的bash 并且尝试运行它
$ docker image build -t koa-demo:0.0.1 .
# 下面这条命令将把我们带入到 这个容器中去
$ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
# 来到容器中找到main.js 并且运行它
$ root@66d80f4aaf1e:/app# node ./main.js
复制代码
- 使用docker-compose简化操作
在前面的文章中,我们需要使用在命令行执行
docker ru xxxx -p -x 。。。
复制代码
如果命令复杂的话,这显然是非常的不方便的,所以我们有了这样的一种解决方案 :使用 docker-compose 拉简化run的复杂程度 比如下面的?的例子
# 这里主要是 用脑docker 跑一个nginx 并且把文件和宿主机映射关系配置好 并指定了一些其他的环境变量配置,
version: '2'
services:
nginx:
image: nginx:stable-alpine
restart: unless-stopped
network_mode: host
volumes:
- /srv/nginx/nginx.conf:/etc/nginx/nginx.conf
- /srv/nginx/conf.d:/etc/nginx/conf.d
- /srv/nginx/html:/usr/share/nginx/html
- /var/log/nginx:/var/log/nginx
ports:
- "80:80"
environment:
- NGINX_HOST=your.domain
- NGINX_PORT=80
复制代码
有了这文件以后,你在build好image之后,只需要命令行一句话就可以搞定了
sudo docker-compose up
复制代码
以上就是最简单的docker 入门了