镜像和容器
为了更好地说明 image 和 container的关系,我们可以类比为面向对象:
docker | 面向对象 |
---|---|
容器 | 对象 |
镜像 | 类 |
类实例化为对象相当于镜像产生容器,一个类可以实例化为多个对象,一个镜像也可以产生多个容器
安装docker
我是在linux机器上安装的docker,直接用命令 yum install docker
即可完成安装,然后用 systemctl start docker
启动docker容器,同理我们要停止docker,只需要把start改成stop,即可,启动之后,我们可以看到docker的版本 docker -v
,每次我们关闭linux机器,docker就会自动关闭,但是我们可以设置开机启动 systemctl enable docker
下面介绍一下docker的常用操作:
docker serach:用来查找docker镜像,默认会在 docker hub来寻找镜像,下面我测试一下mysql镜像:
怎么用这个镜像?
首先pull下来: docker pull 镜像名:标签
会默认帮我们下载最新的镜像,下面演示一下mysql的下载 docker pull mysql
:
这里有个小问题,docker pull mysql 一直没成功,好像是下载速度太慢了,这里我们用aliyun的加速,首先在这里 阿里云加速配置加速账号,它会给你个加速地址 ,我们只需要在 /etc/docker/daemon.json 下面填写好,填写成下面这个样子:然后重启docker服务,就能下载了。
# 这是 daemon.json的样子,这里大家用自己的地址
{
"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"]
}
下载完后,我们可以直接docker images
就能看到下载的镜像,如果我们要下载其他版本的mysql,那就需要我们指定标签了 。
怎么看有哪些标签 ?
这就需要去官网找了,直接搜索你想要的镜像,然后选择标签一栏:
直接按照画圈的地方的命令下载就完事了
如果你要卸载镜像 直接 docker rmi 镜像id
,镜像id 就是那个:
容器操作的步骤 (以tomcat为例)
- 搜索镜像
docker search tomcat
(这里如果你要指定版本,还是需要去docker hub 里面去找标签) - pull 镜像 (根据上一步的镜像名:标签)选择合适的镜像
docker pull tomcat
,默认最新 - 运行容器:
docker run --name mytomcat -d tomcat:latest
// mytomcat是自己起的名字,-d 表示后台运行 tomcat:latest是自己的容器名
docker ps // 查看docker中正在运行的容器
docker stop 容器id // 停止正在运行的容器
docker start 容器id // 开启容器
docker ps -a // 查看所有的容器,包括运行的和停止的
docker rm 容器id // 删除容器 删除完后 docker ps -a 就不显示了 ,
// 这是删除容器而非镜像,我们删除完后还是可以重新启动容器的 docker run --name....
下面是容器的端口映射
docker run -d -p 8888:8080 tomcat // 主机:容器端口 也就是容器的8080端口可以通过主机8888访问
这里我没有关闭防火墙也可以在主机访问到tomcat页面,如果你不能访问,可以关闭防火墙试试,访问方式为 虚拟机ip:8888,比如我的 http://192.168.119.128:8888/
防火墙查看状态 service firewalld status
关闭防火墙 service firewalld status
最后,查看容器的日志: docker logs 容器id
更多的命令,查看docker官方文档。
下面来了解一下究竟怎么用一个docker镜像
我们还是以mysql为例:
我们设置mysql不能像tomcat 一样直接映射一个端口,我们还要为其设置数据库的登录密码,这个怎么设置?
对于这类问题,最好的解决办法就是查看官方文档:
我们之前说了,你要查看tag,点击第三个栏,如果你想了解它的一些用法,那就好好阅读第一栏,里面给了个很好的例子:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
我们如何指定登录密码,里面很清楚了 -e MYSQL_ROOT_PASSWORD=my-secret-pw
只需要传入-e 参数即可,所以最后我们应该这样:
docker run -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql
我们可以用数据库软件在本地连接数据库了。
交互式进入容器操作
上面我们都是直接 -d 以后台的方式启动容器,但是当我们想要进入容器中,比如 ubuntu容器中,该怎么做呢?
下面给出了命令 :docker exec -it 容器id bash
,That’s OK,但是,首先我们要启动容器。
下面是构建自己的容器,也就是 docker build
命令的使用,我们在本机新建一系列文件夹 /usr/local/docker/tomcat
,并且新建一个dockerfile
文件,文件内容如下:
from tomcat # 这段话需要指定容器
RUN rm -rf /usr/local/tomcat/webapps/ROOT/*
RUN echo "hello docker" > /usr/local/tomcat/webapps/ROOT/index.html
我们在新的容器中移除 /ROOT/
下面所有的文件,并重写index文件。我们重建镜像并命名为mytom:
docker build -t mytom .
最后那个点表示当前的文件夹下面的dockerfile。这个过程相当于我们把tomcat先克隆下来,再进行重新改造成我们自己的镜像,再打包发布。
上面那个none是个虚悬镜像,之前发布的时候,修改过一次,这次属于第二次发布,所以出现了虚悬镜像,就是上面那个名字为none的。要想清理所有的虚悬镜像,就要先停掉并移除该虚悬镜像对应的所有容器,再执行docker image prune
。完毕后,我们重启mtom镜像,docker run -d -p 8080:8080 mytom
,然后在浏览器访问,就能看到我刚写的index页面。
docker的挂载
我们在本地的Tomcat文件下新建一个ROOT/index.html
文件,随便在index中写入一句话,我们然后把这个文件挂载到Tomcat容器中,下面是操作命令:
docker run -p 8080:8080 --name tomcat -d -v /usr/local/docker/tomcat/ROOT/:/usr/local/tomcat/webapps/ROOT tomcat
参数 -v 后面的内容是你本地主机下的路劲,而 :后面的路径是容器中Tomcat的路径。这就给挂载上去了。