docker安装和使用


自从接触docker以后就几乎再也离不开它了,简直方便到不可思议。再复杂的配置,只需要做一次,存到自己的Doker hub上,需要的时候pull一下就完美解决。本文在centos7.4下操作,记录下简单的命令和常用技巧。

安装、启动、镜像配置

linux下安装软件真是太惬意的事情了,一行命令即可:

yum install docker

然后配置国内的镜像,可以使用中国官方镜像,修改一下配置文件即可。

vi /etc/docker/daemon.json

写入registry-mirrors健值(默认只有一个[],覆盖即可)

daemon.json
1
2
3
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

启动服务并设置开机启动docker进程

systemctl start docker.service
systemctl enable docker.service

常用命令说明

介绍两个概念,别人写好的编译完成的直接可用的叫做镜像,通过pull命令拉取到本地后。可以运行多次,每一次运行产生一个容器。容器相当于一个迷你小型的linux虚拟主机。

以安装nginx服务器为例

首先,可以用search参数搜索当前可用的nginx镜像,列出如下图。

docker search nginx

搜索nginx镜像的结果

选择自己需要的镜像,输入docker.io/后面的内容即可,比如下载官方镜像:

docker pull nginx

查看本机已下载的镜像

docker images

下一步运行,这里面有几个参数很重要

  • -d 后台运行
  • --name 指定运行的容器名称
  • -v dir1:dir2 将主机的dir1路径挂载到容器的dir2路径下,此时在容器内部访问dir2路径,会自动访问到主机的dir1路径,也就是说可以通过对主机dir1路径下进行操作即可和容器进行交互,例如将配置文件挂载出来。
  • -p port1:port2 将主机的port1端口和容器的port2端口绑定。注意:port1的写法可以是(以80端口为例) 80 | 0.0.0.0:80 | 127.0.0.1:80 第一种和第二种都表示对外暴露80端口,第三种表示只能本地访问。 若不指定当前参数,则本机其他进程或者主机外的请求均无法访问到该容器。
  • --restart=always 这样写即可在启动docker后立即启动当前容器,加上docker是开机启动的。遇到无法解决的问题是,重启服务器即可。
  • --link name1:name2 该参数将一个已经正在运行的容器name1关联到当前容器,在当前容器中可以通过name2进行访问,通常可以用来链接数据库容器。关于容器互联,更复杂的场景需要再去了解吧。
  • 最后指定要运行的镜像名称 [nginx]

这个示例暴露80端口到公网,配置服务重启后自动启动容器,指定容器名:mynginx,将nginx配置文件挂载到容器下,最后指定后台运行

docker -p 80:80 --restart=always --name mynginx -v /root/nginx/conf.d:/etc/nginx/conf.d -d nginx

运行成功后,ps 查看正在运行的容器,-a 参数可以查看所有容器

docker ps -a

重启容器、停止容器

docker restart mynginx
docker stop mynginx

删除容器, 参数-f可以删除正在运行的容器

docker rm -f mynginx

删除镜像

docker rmi nginx

编写自己的镜像

我们可以通过编译Dockerfile (名字只能是这个),生成自己的镜像。

在Dockerfile文件所在目录,运行以下命令即可

docker build .

Dockerfile 的编写,语法规则可以查看网上的教程,随意谷歌一个排名第一的,Dockerfile 语法。别人写的很好了,我们就学习下。同时呢,找一个大佬的代码看一看,应该就掌握了。
在[docker 官方仓库](https://hub.docker.com) 有很多,我用lanyu写的hbase镜像的做演示。

目录结构
目录结构
目录结构
目录结构

关于docker-entrypoint.sh 脚本的内容也可直接放在编译过程RUN命令进行。但据大佬将,可能存在编译时执行不稳定的情况,出现不可预知的错误。所以在编译好后,通过第一次启动时执行脚本完成。

Fork me on GitHub