作业内容
参考:玩转 Docker 容器技术:1-6章 ,按课件内容实践,并给出实验报告。
操作系统
本文是基于CentOS7进行的实验。
安装Docker
安装过程
我用的是CentOS,用国内阿里云安装,运行以下命令:
//安装 yum-utils , 使用 yum-config-manager 工具设置Yum源, 后面两个是 devicemapper驱动依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
//使用阿里源访问
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
//查看指定版本
yum list docker-ce --showduplicates
//安装指定版本
sudo yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
//启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker
过程中,我出现了以下问题,原因是没有把当前用户加入docker用户组,解决方法见此链接:
验证安装成功
在终端输入docker version
,可以看到client和server的信息:
运行第一个容器
按照老师的PPT,输入docker run hello-world
运行hello-world镜像:
输入以下指令docker run -it ubuntu bash
运行Ubuntu镜像:
Docker基本操作
显示本地镜像库内容
输入docker images
可以看到本地已经有了刚刚下载的ubuntu和hello-world镜像:
显示运行中的容器
输入docker ps
,由于没有运行中的容器,所以内容为空:
显示所有容器(包含已中止)
输入docker ps -a
,可以看到已经中止的ubuntu和hello-world容器:
继续运行原容器并进入
根据容器的NAMES
属性输入以下命令来重新运行ubuntu容器:
docker restart $NAMES
docker ps
dockerr attach $NAMES
MySQL与容器化
拉取MySQL镜像
输入docker pull mysql:5.7
拉取镜像:
再输入docker images
检查镜像是否下载成功:
构建docker镜像
使用MySQL容器构建文件Dockerfile来构建镜像,它的常见指令如下:
- 创建文件夹
新建一个文件夹mydock
,并在里面创建一个dockerfile:
- 录入dockfile内容
- 构建镜像
运行命令docker build . -t hello
构建镜像hello:
- 运行镜像
输入docker run -it --rm hello -H
:
使用MySQL容器
- 启动服务器
输入以下命令:sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
- 启动MySQL客户端
输入以下命令凭借用户名和密码打开数据库端口:docker run -it --net host mysql:5.7 "sh" mysql -h127.0.0.1 -P3306 -uroot -proot
- 创建卷并挂载
创建卷mydb
并挂在/var/lib/mysql
中:docker rm $(docker ps -a -q) -f -v docker volume create mydb docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7
- 启动客户端容器链接服务器
使用``–link```连接两个容器,使得客户端容器内可以使用mysql这个别名访问服务器:docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash mysql -hmysql -P3306 -uroot -proot
Docker仓库(Registry)
registry
是registry映像的一个实例,在Docker中运行。我将根据官网指南搭建私有容器仓库。
运行本地仓库
使用以下命令来启动仓库容器:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
将映像从Docker Hub复制到registry
以下示例表示从Docker Hub上拉取ubuntu:16.04
镜像,并且重新标记为my-ubuntu
,然后把它推送到本地仓库。最后删除掉ubuntu:16.04
和my-ubuntu
镜像,把my-ubuntu
镜像从本地仓库移除。
- 拉取ubuntu:16.04镜像
输入命令:docker pull ubuntu:16.04
- 将镜像标记为
localhost:5000/my-ubuntu
。这将为现有镜像创建一个附加标签。当标签的第一部分是主机名和端口时,推入时Docker会将其解释为仓库的位置。
输入命令:docker tag ubuntu:16.04 localhost:5000/my-ubuntu
- 将镜像推送到在
localhost:5000
运行的本地仓库
输入命令:docker push localhost:5000/my-ubuntu
- 删除本地缓存ubuntu:16.04和localhost:5000/my-ubuntu 镜像,可以测试从仓库拉取镜像。这不会从仓库中删除localhost:5000/my-ubuntu镜像。
输入命令:docker image remove ubuntu:16.04 docker image remove localhost:5000/my-ubuntu
- 把localhost:5000/my-ubuntu镜像从仓库中拉取出来
输入命令:docker pull localhost:5000/my-ubuntu
停止本地仓库
- 停止仓库,可以用以下命令,和停止容器一样的操作:
docker container stop registry
- 删除仓库,用以下命令:
docker container rm -v registry