Docker使用

Posted OverZeal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker使用相关的知识,希望对你有一定的参考价值。

Docker是一个开源的虚拟化容器技术。可以帮助我们选择和配置一些开发环境,这对于我这个选择困难患者来说挺有用的,我们可以选择所需软件的Docker镜像进行安装,大部分常见的开发环境都可以在Docker中找到对应的镜像,可以先在 https://hub.docker.com/ 中进行查找并阅读每个软件镜像的使用说明。每个镜像就是一个软件,每个镜像可以运行多个,相当于多开(容器),而且Docker内部使用沙箱机制,多个容器之间相互隔离互不影响。

Docker本身是Linux下的东西,所以直接在Linux下进行操作是比较好的,不过,也是有Windows版本的Docker安装工具,基本上就是在virtualbox下开个Linux虚拟机,在虚拟机中运行Docker。所以,自己也可以在virtualbox下建个Linux虚拟机,在虚拟机中运行Docker,建立虚拟机的过程和方法这里不再叙述,我之前就是在本机通过虚拟机来测试Docker及其指令的。需要注意的是:虚拟机中的IP应该是与本机IP属于同一个网段,我们可以使用下面命令查看Linux的IP地址

ip addr

还需要说的是,我安装的Linux版本是CentOS7(Minimal ISO) ,它默认的网卡是不启用的,我们使用如下命令修改网卡配置

vi /etc/sysconfig/network-scripts/ifcfg-网卡名

在这里盗两张图说明一下

可以看到默认的ONBOOT是no,我们需要修改为yes

然后按 Esc 退出  再出入命令 :wq  再按Enter即可

重要的就是虚拟机的IP与本机的IP在同一个网段下,这样我们在本机才可以通过IP访问到虚拟机。这里还有一个隐藏的坑:就是Linux的防火墙,可能会因为防火墙的问题导致各种无法访问的问题,索性就把Linux的防火墙给关掉。CentOS7命令如下:

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

接下来查看防火墙(firewalld)的状态,使用命令:

systemctl status firewalld

看到如下图所示,就表示防火墙已经关闭了

使用云主机更新yum

我后来在云主机上进行配置Docker的,因为在虚拟机中的IP与当前本机IP地址绑定的,一旦以后本机接入不同的网络,我们访问虚拟机的地址也需要相应修改。接下来就记录我在云主机中的配置过程,如果与虚拟机配置有什么不同,我也会说明一下。

我使用SmartTTY这个客户端去连接云主机的,这个软件的安装什么的比较简单

连接上云主机(CentOS7)之后,就可以使用各种Linux命令了,我们可以使用上面说过的命令查看IP地址和防火墙是否关闭,只不过,购买云主机之后会给你分配一个外网可以访问的IP,我们都是通过这个外网可以访问的IP去连接服务器的,所以IP地址不用去修改什么。

接下来,我们可以使用命令查看一下Linxun的版本,内核版本必须是3.10及以上

查看Linxun内核版本之后,强烈建议使用 yum update命令更新一下,之前我在虚拟机中就是因为没有先更新一下,所以导致Docker无法启动。对了,这里与虚拟机中安装有些不同,在虚拟机中全新安装CentOS是没有yum源的,也就是说yum不知道去哪里下载或更新软件,我们可以使用命令查看目前都有什么yum源处于enable

yum repolist all

配置yum源的方法可以参照 https://jingyan.baidu.com/article/fdbd4277aebde1b89e3f48b4.html ,这个百度知道说的挺清楚的,配置的是阿里云的yum源,还可以配置网易的yum源的国内yum源,使用这些国内的yum源下载会快一些,默认yum源下载慢的也可以设置为国内的yum源。

安装Docker

yum更新之后,就开始安装Docker

yum install docker 之后就会自动去为我们下载Docker,中途会有一些需要我们选择的,一路y下去即可

安装Docker之后,可以通过命令docker -v 查看一些Docker版本,可以看到版本之后就说明安装Docker成功了

接下来,就需要开启Docker服务,使用命令: systemctl start docker

start后不会有任何信息输出,有的时候没有信息就是最好的信息。这里再说一句,最后enable一下Docker,这里的启用Docker就相当于把Docker设置为开机自启,这样重启系统之后,就不用再statr了

下载mysql

我们就通过下载MySQL的Docker镜像,并允许MySQL来熟悉一下Docker的一些命令

首先通过docker images查看都有哪些镜像,因为我们是刚安装的Docker,所以什么镜像都不会有

可以通过docker search 应用名 来搜索镜像,和在Docker Hub(https://hub.docker.com/)这个网站搜索的结果是一样的

OFFICIAL是应用官方的镜像,AUTOMATED是自动配置好的,我们可以通过NAME值进行指定,这里我们就下载官方的就好了。Docker默认会下载最新版(latest)的镜像,目前MySQL最新版是8,这里有个坑:就是MySQL8采用了新的安全机制,所以有些可视化工具(例如naviecat)就不能用了,升级最新的navicat或者是修改MySQL的配置文件才可以,我们就不要踩这个坑了,使用MySQL5.7版本就好。

我们使用docker pull mysql:5.7  下载MySQL5.7

使用加速器下载Docker镜像

因为Docker镜像有的时候下载会很慢,我闷可以使用国内的一些加速服务,例如 镜像中国(https://www.docker-cn.com/registry-mirror), DaoCloud(http://www.daocloud.io/mirror#accelerator-doc)都有很详细的加速步骤,照着做就好了。想要一直使用某一加速服务,需要修改 /etc/docker/daemon.json 文件。如果我们运行DaoCloud的加速器命令,它会自动修改这个文件,但是在json文件的最后一个元素后多一个逗号,json对于逗号还是很敏感的,我们使用vi去把这个逗号删掉才可以正常运行Docker。

使用命令docker images 再来查看一下现有镜像

如果我们不想要这个镜像了,可以使用docker rmi命令删除,只不过删除镜像之前需要将该镜像的所有运行的容器先删除,不然是删不掉镜像的

docker rmi imageID

使用docker run命令可以运行这个镜像的一个容器,多次运行就会有多个该镜像的容器。因为MySQL需要访问密码,所以我们在运行时候需要指定数据库的访问密码;而且,如果想要在外部访问,就需要映射端口

  • --name 可以指定容器的名字,也可以不写,不写会有自动分配容器名
  • -e 参数名=参数值 指定参数的值
  • -d 表示在后台运行
  • -p 端口:容器端口 -p参数就是在映射端口,这里将MySQL的3306端口映射到Linux的3306端口上,外界通过3306就可以访问这个MySQL容器,如果有多个MySQL容器运行,我们应该将3306映射到多个其他端口上,例如第二个容器映射3307:3306 ,那么外界就通过3307访问第二个MySQL容器。

run成功之后会有一串序列号,就表示运行成功了,通过docker ps 可以查看先在运行的容器

如果我们想要停止使用docker stop命名,删除这个容器使用docker rm

docker stop CONTAINER ID

docker rm CONTAINER ID

因为我使用的是阿里云的云主机,它有一个安全组策略,我们需要配置规则,将3306端口加入到入方向,这样我们外界通过3306访问才不会被安全机制拦截,如果有多个端口我们都需要在这里配置映射。

这一切配置好之后,我们就可以通过本地的navicat访问我们这个云主机的MySQL

 

以上是关于Docker使用的主要内容,如果未能解决你的问题,请参考以下文章

markdown docker-compose片段

sh Docker片段

《Docker 源码分析》全球首发啦!

docker 部署 coredns(内部域名解析)

docker 部署 coredns(内部域名解析)

将 Docker 容器限制为单个 cpu 核心