Docker之镜像创建及部署
2019-02-20 23:33:56上篇文章提到了一些简单的docker命令,这里主要展示一下我们如何将我们需要的服务利用docker一步一步把它跑起来,文章内容不够全面,仅供学习参考使用。
穿梭门:Docker之常用命令
尝鲜
我们可以从最简单的Hello World开始,感受一下Docker的运行效果,直接在命令行执行下面的命令,就能从官方仓库中拉取指定名字的镜像。如果拉取的是自己或其他渠道提供的镜像,pull
后面带指定路径即可。
docker pull hello-world
拉取成功后执行docker images
可以看到拉下来的镜像列表,然后我们直接跑起来
docker run hello-world
输出这段提示后,hello world就会停止运行,容器自动终止。有些容器不会自动终止,因为提供的是服务,比如我们常部署的服务等。
注:
docker run
命令具有自动抓取image文件的功能,如果发现本地没有指定的image,就会从仓库中自动抓取,也就是前面的docker pull
并不是必须的。
正餐
上面的hello-world
明显不能满足我们的欲望,我们的实际需求是将我们自己原本跑在VM或物理机上的服务能部署在Docker上面,那我们现在就开始吧。
Dockerfile
要达到我们的目的,不能离开的就是这个Dockerfile文件,Docker是根据该文件来生成二进制的image文件。我们直接使用一个实际的样例来进行讲解,新建一个文件并命名Dockerfile
FROM centos
RUN curl -O 'https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz' && \
tar -C /usr/local -zxvf go1.11.5.linux-amd64.tar.gz && \
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile && \
source /etc/profile
上面文件的内容写的很简单,主要实现的功能就是在centos环境搭建一个golang环境,当然其中省掉了GOPATH
的配置,需要的话可以直接参照上面的步骤。
注:
FROM
是指从需要的镜像源,可以是本地的,也可以是远端的,他的优先级是:本地获取->远端
RUN
是指执行命令
编译
在Dockerfile文件所在路径下进行我们的docker构建,构建命令如下:
docker build -t centos-go:1.11.5 .
其中-t
是指定镜像名称centos-go
,1.11.5
是打的tag,详细参考docker build --help
。命令最后的点.
表示Dockerfile的路径。使用
docker images
就能看到我们刚编译好的本地镜像了
运行
一个最基本的镜像就这么编译好了,我们把它跑起来并进入容器内部
$ sudo docker run -it centos-go:1.11.5 bash
[root@c2713b0babbe /]# cat /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
...
unset i
unset -f pathmunge
export PATH=$PATH:/usr/local/go/bin
此时你已经发现运行的镜像中已经将我们配置的golang配置加载进去了。运行到这里,其实我们完成了重要的一步了,很多服务的运行基础环境就是这么来的,打一个基础镜像版本,然后将基础镜像推送到自己的镜像仓库中,比如腾讯云或阿里云仓库,下次构建项目服务的时候就基于此基础版本来进行编译。
Dockerfile语法
See More:官方文档
FROM node:8.4
COPY . /app
WORKDIR /app
RUN npm install --registry=https://registry.npm.taobao.org
EXPOSE 3000
注:
FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node
COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录
WORKDIR /app:指定接下来的工作路径为/app
RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件
EXPOSE 3000:将容器 3000 端口暴露出来, 允许外部连接这个端口
其它命令如下
其它
常用运行命令
运行
docker run -d -p 8888:80 nginx
运行nginx服务,并将本机端口8888与nginx的80端口进行绑定。
查看日志
docker logs --help
里面可以列表很多命令,如指定时间返回内的日志等,大家各自执行以下,各取所需。
进入终端
docker exec -it cfc49596eedf /bin/bash
注:
更多有效命令可以多多执行--help,里面看一下就能解惑了