服务计算:玩转docker容器技术
文章目录
一、什么是docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
- DockerClient客户端
- Docker Daemon守护进程:Daemon是Docker的守护进程,Docker Client通过命令行与Docker Damon通信,完成Docker相关操作
- Docker Image镜像:docker Image概述
- DockerContainer容器:Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)[Container简介](https://blog.csdn.net/qq_17545293/article/details/80822310)
二、准备docker环境
1、按照官方指引部署环境
- 环境:CentOS Linux 7
- 依照文档进行安装:获取Docker Engine
使用set up repository的方法 - 通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community 。
$ sudo docker run hello-world
- 此时运行
docker run hello-world
会表示权限不足。
由文档可知,docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
解决方法:docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令sudo groupadd docker #添加docker用户组 sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中 newgrp docker #更新用户组 docker ps #测试docker命令是否可以使用sudo正常使用
此时再次运行docker run hello-world
2、检查docker安装版本
$ docker version
三、docker基本操作
1、运行镜像
$ docker run -it ubuntu bash
其中-it 参数,通过终端与进程(容器)交互,stdin,stdout,stderr定向到 TTY。
2、基本操作
- 获得帮助:
$ docker --help
- 获取本地镜像库内容:
$ docker images
相当于$ docker image ls
- 获取容器:
$ docker ps
相当于$docker container ls
,-a表示所有容器,不加则表示正在运行的容器。
- 继续运行原容器并进入:$ docker restart <CONTAINER NAME>
+docker attach <CONTAINER NAME>
四、MySQL与容器化
1、拉取MySQL镜像
- 发现拉取镜像的速度太慢了, 因为默认是从Docker Hub拉取镜像,而国内从 Docker Hub 拉取镜像有时会遇到困难。所以需要修改镜像源(此处修改为Azure 中国镜像):
$ sudo vim /etc/docker/daemon.json
{
"registry-mirrors":["https://dockerhub.azk8s.cn"]
}
$ systemctl daemon-reload
$ systemctl restart docker
- 拉取MySQL镜像:
$ docker pull mysql:5.7
2、使用MySQL容器
- 启动服务器:
$ sudo docker run -p 8085:8085 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
此处的端口8085是自己设置的,按照老师ppt的3306端口会显示被占用。如下图。
如果出现这种情况,首先$ docker ps -a
,找到刚才安装的ContainerID,然后执行$ docker rm <CONTAINER_ID>
之后再重新启动(换一个端口)即可。结果如下图
- 启动MySQL服务端:
- 数据库文件存储位置: