第11次作业——容器化技术与容器服务

文章目录

  • sc-hw11 容器化技术与容器服务
    • 实验环境
    • 部署docker环境
    • docker 基本操作
    • MySQL与容器化
      • 部署MySQL
      • 构建 docker 镜像练习
      • 使用 MySQL 容器
      • 创建卷并挂载
      • 启动客户端容器链接服务器
      • Docker compose 与多容器应用自动化部署
    • Docker网络
      • 管理容器网络
      • 备制支持 ifconfig 和 ping 命令的 ubuntu 容器
      • 启动另一个命令窗口,由容器制作镜像
      • 创建自定义网络
    • Docker 仓库
      • 搭建私有容器仓库
      • 阿里云容器镜像服务(免费)实践
        • 常用仓库操作
    • 容器监控与日志
    • docker图形化管理工具
    • Docker Engine API与开发
      • 用 curl 发 docker 客户端命令

sc-hw11 容器化技术与容器服务

实验环境

Ubuntu 18.04 

部署docker环境

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

首先保险起见,尝试清理一下系统中的 Docker 旧组件或版本:

sudo apt-get remove docker docker-engine docker.io containerd runc

尝试更新一下软件源索引:

sudo apt-get update

安装一些系统依赖组建:

sudo apt-get install  apt-transport-https ca-certificates curl gnupg-agent software-properties-common

添加 Docker 官方的公钥:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

这一步如果失败并提示以下错误信息:
第11次作业——容器化技术与容器服务_第1张图片
这是由于GitHub release文件被墙导致下载失败了。

解决办法:
百度ipaddress,查找被墙网址的ip:
第11次作业——容器化技术与容器服务_第2张图片
然后 vi /etc/hosts命令在 hosts文件末尾中加入以下内容:

52.216.107.188 github-com.s3.amazonaws.com

重新执行上述添加公钥的命令即可成功。

验证一下公钥,输出应该为: 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

sudo apt-key fingerprint 0EBFCD88

添加 Docker 官方的软件源:

sudo add-apt-repository  "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再次更新软件源索引:

sudo apt-get update

可以开始安装 Docker,执行命令后等待就可以:

sudo apt-get install docker-ce docker-ce-cli containerd.io

如果你不是root用户,请将用户加入docker用户组:

sudo usermod -aG docker $(whoami)

重启虚拟机即可生效。

最后就是安装 docker-composer 辅助命令了,如果项目要使用到多个 docker 容器,那它就是你的福音,安装方式有点特殊,也很简单,就是直接下载文件,放入系统命令目录,赋予执行权限就可以了:

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker 基本操作

检查docker的安装

docker version

第11次作业——容器化技术与容器服务_第3张图片

运行第一个容器

docker run hello-world

第11次作业——容器化技术与容器服务_第4张图片

docker run -it ubuntu bash

第11次作业——容器化技术与容器服务_第5张图片
-it参数:通过终端与进程(容器)交互,stdin,stdout,stderr定向到 TTY

如果没有-it参数,执行上述命令无法为容器分配伪输入终端,无法开启交互模式。

显示本地镜像内容:

docker images

第11次作业——容器化技术与容器服务_第6张图片
显示运行中容器:

docker ps

在这里插入图片描述
显示所有容器(包括已中止):

docker ps -a

第11次作业——容器化技术与容器服务_第7张图片

MySQL与容器化

部署MySQL

拉取MySQL镜像:
这一步比较曲折,试了好几种办法都失败了,记录一下没能成功的尝试过程。

直接拉取:

docker pull mysql:5.7

结果:连接失败,提示TLS hand handshake timeout。

在docker文件夹下配置daemon.json, 修改docker的registry-mirrors:

{"registry-mirrors": ["http://hub-mirror.c.163.com"]}

{"registry-mirrors": ["http://4e70ba5d.m.daocloud.io"]} 

然后service restart docker重启服务器

结果:可以下载,一开始速度挺快,然后越来越慢,到最后直接卡住。

最后一种办法拉取成功了:通过国内镜像daocloud.io/library库下载

docker pull daocloud.io/library/mysql:5.7

第11次作业——容器化技术与容器服务_第8张图片
在这里插入图片描述

构建 docker 镜像练习

~] mkdir mydock && cd mydock
mydock]# vi dockerfile

录入一下内容:

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

构建镜像:

docker build . -t hello

第11次作业——容器化技术与容器服务_第9张图片
查看构建的镜像:

docker images hello

在这里插入图片描述
运行镜像:

docker run -it --rm hello -H 

第11次作业——容器化技术与容器服务_第10张图片

使用 MySQL 容器

启动服务器:

sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d daocloud.io/library/mysql:5.7
docker ps

在这里插入图片描述
启动 MySQL 客户端:

docker run -it --net host daocloud.io/library/mysql:5.7 "sh"
mysql -h127.0.0.1 -P3306 -uroot -proot

第11次作业——容器化技术与容器服务_第11张图片

创建卷并挂载

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 daocloud.io/library/mysql:5.7

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述命令的作用就是将自己定义的数据卷挂载到 /var/lib/mysql 上。

启动客户端容器链接服务器

docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
env
mysql -hmysql -P3306 -uroot -proot

第11次作业——容器化技术与容器服务_第12张图片

Docker compose 与多容器应用自动化部署

下载 Docker-compose 已经在部署 docker 时完成

Docker网络

管理容器网络

docker network ls

第11次作业——容器化技术与容器服务_第13张图片

备制支持 ifconfig 和 ping 命令的 ubuntu 容器

docker run --name unet -it --rm ubuntu bash

第11次作业——容器化技术与容器服务_第14张图片

apt-get update

第11次作业——容器化技术与容器服务_第15张图片

apt-get install iputils-ping -y

第11次作业——容器化技术与容器服务_第16张图片

ifconfig

第11次作业——容器化技术与容器服务_第17张图片

ping 

第11次作业——容器化技术与容器服务_第18张图片

启动另一个命令窗口,由容器制作镜像

 docker commit unet ubuntu:net

在这里插入图片描述

创建自定义网络

创建 mynet:

docker network create mynet

在两个窗口创建 u1,u2 容器网络:

docker network create u1
docker network create u2

并使用以下命令:

docker run --name u1 -it -p 8080:80 --net mynet --rm ubuntu:net bash
docker run --name u2 --net mynet -it --rm ubuntu:net bash

u1 ,u2 两个容器网络之间互相ping(u1 的 IP 是 172.21.0.2, u2 的 IP是172.21.0.3):
第11次作业——容器化技术与容器服务_第19张图片
第11次作业——容器化技术与容器服务_第20张图片
u1 / u2 ping 外部网络,如百度:
第11次作业——容器化技术与容器服务_第21张图片
从结果可以看到,容器网络是可以连通外部网络的。

执行以下命令:

docker inspect u1
docker network connect bridge u1
docker network disconnect mynet u1

然后重新ping:
第11次作业——容器化技术与容器服务_第22张图片
第11次作业——容器化技术与容器服务_第23张图片
u1, u2之间无法ping通了,但依然可以ping通外部网络。

Docker 仓库

搭建私有容器仓库

运行一个本地仓库:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

第11次作业——容器化技术与容器服务_第24张图片

从 Docker Hub 拉取镜像 ubuntu:16.04:

docker pull ubuntu:16.04

第11次作业——容器化技术与容器服务_第25张图片

标记镜像:

docker tag ubuntu:16.04 localhost:5000/my-ubuntu

当标记的第一部分是主机名和端口时,Docker 在推送时将其解释为仓库的位置。

推送镜像到本地仓库:

docker push localhost:5000/my-ubuntu

第11次作业——容器化技术与容器服务_第26张图片
删除本地缓存和镜像:

docker image remove ubuntu:16.04
docker image remove localhost:5000/my-ubuntu

第11次作业——容器化技术与容器服务_第27张图片
之后可以从仓库中拉取镜像。

从仓库中拉取镜像:

docker pull localhost:5000/my-ubuntu

第11次作业——容器化技术与容器服务_第28张图片
停止并删除本地仓库:

docker container stop registry && docker container rm -v registry

在这里插入图片描述

阿里云容器镜像服务(免费)实践

访问https://cr.console.aliyun.com/。

用淘宝或注册一个账号。

选择“容器镜像服务”。

常用仓库操作

登录:

docker login --username= registry.cn-shenzhen.aliyuncs.com

第11次作业——容器化技术与容器服务_第29张图片
标签:

docker tag hello-world registry.cn-shenzhen.aliyuncs.com/beikenken/hello-world

上传:

docker push registry.cn-shenzhen.aliyuncs.com/beikenken/hello-world

第11次作业——容器化技术与容器服务_第30张图片
运行:

docker run --rm hello-world

第11次作业——容器化技术与容器服务_第31张图片
退出:

docker logout registry.cn-shenzhen.aliyuncs.com

在这里插入图片描述

容器监控与日志

检查 docker 的状态:

docker info 

第11次作业——容器化技术与容器服务_第32张图片

第11次作业——容器化技术与容器服务_第33张图片

docker info --format {
    {.ServerVersion}}

查看容器内进程:

docker top

容器详细信息:

 docker inspect

第11次作业——容器化技术与容器服务_第34张图片

docker inspect -f '{
    {.NetworkSettings.IPAddress}}' 084f46eddf33

容器日志查看:

docker logs
ll

第11次作业——容器化技术与容器服务_第35张图片

docker图形化管理工具

Portainer是一个可视化的容器镜像的图形管理工具,利用Portainer可以轻松构建,管理和维护Docker环境。 而且完全免费,基于容器化的安装方式,方便高效部署。

部署 portainer :

docker pull portainer/portainer

第11次作业——容器化技术与容器服务_第36张图片

选择 aliyun 的镜像源很快。

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

访问9000端口可以查看图形化界面:

第11次作业——容器化技术与容器服务_第37张图片

第11次作业——容器化技术与容器服务_第38张图片

Docker Engine API与开发

用 curl 发 docker 客户端命令

docker pull alpine

第11次作业——容器化技术与容器服务_第39张图片

sudo curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" \
-d '{"Image": "alpine", "Cmd": ["echo", "hello world"]}' \
-X POST http://localhost/v1.41/containers/create

sudo curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/8ddb074cfada0fdffaee4ffbee9131bedf625b1e6d789f0e438106e7af96555c/start
sudo curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/8ddb074cfada0fdffaee4ffbee9131bedf625b1e6d789f0e438106e7af96555c/wait

第11次作业——容器化技术与容器服务_第40张图片

curl --unix-socket /var/run/docker.sock -o - "http://localhost/v1.41/containers/8ddb074cfada0fdffaee4ffbee9131bedf625b1e6d789f0e438106e7af96555c/logs?stdout=1"

你可能感兴趣的:(服务计算,docker,ubuntu,mysql)