本次实验的环境是Ubuntu。整个实验分为以下几个步骤:
一. 准备docker环境
1. 安装docker:
sudo apt install docker.io
2. 查看安装docker版本
docker -v
3. 查看docker是否启动
systemctl status docker
若出现如下显示,则说明docker已经正常启动。
二. 运行镜像
1. 运行hello-world镜像
sudo docker run hello-world
2. 运行Ubuntu镜像
sudo docker run -it ubuntu bash
三. docker基本操作
1. 显示本地镜像库内容
sudo docker images
可以看见有刚才下载的hello-world镜像和ubuntu镜像。
2. 获得帮助
docker --help
3. 显示正在运行的容器
sudo docker ps
4. 显示所有容器(包括已中止)
sudo docker ps -a
可以看到包含已经中止的hello镜像和ubuntu镜像。
5. 继续运行原容器并进入
sudo docker restart $NAMES
sudo docker ps
sudo dockerr attach $NAMES
根据容器的NAMES属性来重新运行ubuntu容器。
四. mysql与容器化
1. 拉取mysql镜像
sudo docker pull mysql:5.7
此时再查看本地镜像,发现mysql出现了。
2. 构建docker镜像
首先新建文件夹mydock,然后在mydock目录下新建文件dockerfile。
dockerfile中输入如下内容。
然后构建镜像hello。
sudo docker build . -t hello
最后运行镜像:
sudo docker run -it --rm hello -H
2. 使用mysql容器
首先启动服务器:
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
然后启动mysql客户端:
sudo docker run -it --net host mysql:5.7 "sh"
mysql -h127.0.0.1 -P3306 -uroot -proot
3. 挂载卷保存db
查看数据库文件:
sudo docker exec -it mysql2 bash
dockerfile的VOLUME /var/lib/mysql含义:
sudo docker container prune -f
sudo docker volume prune -f
sudo docker volume ls
创建卷并挂载到/var/lib/mysql目录:
这里运行remove命令时,发现直接添加sudo还是会报错,没有权限,所以先将当前用户加入到了docker用户组。
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
然后启动客户端容器链接服务器:
docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
mysql -hmysql -P3306 -uroot -proot
使用–link连接两个容器,客户端容器内可以使用mysql这个别名访问服务器。
五. docker网络
1. 备制支持ifconfig和ping命令的ubuntu容器
docker run --name unet -it --rm ubuntu bash
apt-get update
apt-get install net-tools
apt-get install iputils-ping -y
ifconfig
ping (host ip)
2. 启动另一个命令窗口,由容器制作镜像
sudo docker commit unet ubuntu:net
六. docker仓库
1. 启动仓库容器:
2. 镜像操作
首先拉取ubuntu:16.04镜像:
docker pull ubuntu:16.04
然后将镜像标记为localhost:5000/my-ubuntu,并将镜像推送到在localhost:5000运行的本地仓库:
docker tag ubuntu:16.04 localhost:5000/my-ubuntu
docker push localhost:5000/my-ubuntu
删除本地缓存ubuntu:16.04和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