服务计算(11)——容器化技术与容器服务

实验要求

按课件内容实践,并给出实验报告

实验过程

准备docker环境

参考cnetos7 安装 docker17.03.2

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 --nogpgcheck

在这里插入图片描述

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo --nogpgcheck

在这里插入图片描述

sudo yum install docker-ce --nogpgcheck

在这里插入图片描述

运行docker:

systemctl enable docker

systemctl start docker

sudo docker version

在这里插入图片描述

运行第一个容器

运行镜像

sudo docker run hello-world

在这里插入图片描述

sudo docker run -it ubuntu bash

在这里插入图片描述

Docker 基本操作

显示本地镜像库内容

sudo docker images

在这里插入图片描述

获得帮助

sudo docker --help

在这里插入图片描述

显示运行中容器

sudo docker ps

在这里插入图片描述

显示所有容器(包含已中止)

sudo docker ps -a

在这里插入图片描述

继续运行原容器并进入

sudo docker restart competent_wilson

sudo docker attach competent_wilson

在这里插入图片描述

MySQL与容器化

拉取 MySQL 镜像

sudo docker pull mysql:5.7

sudo docker images

在这里插入图片描述

构建docker镜像练习

mkdir mydock && cd mydock

vi dockerfile

录入以下内容

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

构建镜像

sudo docker build . -t hello

在这里插入图片描述

运行镜像

sudo docker run -it --rm hello -H

在这里插入图片描述

使用MySQL容器

启动服务器

sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

sudo docker ps

在这里插入图片描述

启动 MySQL 客户端

sudo docker run -it --net host mysql:5.7 "sh"

# mysql -h127.0.0.1 -P3306 -uroot -proot

在这里插入图片描述

使用MySQL容器(挂载卷保存db)

数据库文件在哪里?

sudo docker exec -it mysql2 bash

root@64a11fda5d7b:/# ls /var/lib/mysql

在这里插入图片描述

Dockerfile 的 VOLUME /var/lib/mysql 的含义

sudo docker container prune -f

sudo docker volume prune

sudo docker volume ls

在这里插入图片描述

  • 每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置
  • 这个卷在主机(host)的 /var/lib/docker/volumes/ 目录下

在这里插入图片描述

创建卷并挂载

sudo docker rm $(sudo docker ps -a -q) -f -v

sudo docker volume create mydb

sudo docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7

在这里插入图片描述

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

sudo docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash

root@d75bc4ca1ef7:/# env

root@d75bc4ca1ef7:/# mysql -hmysql -P3306 -uroot -proot

在这里插入图片描述

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

下载:docker-compose(容器编排的原型)

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

sudo chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

在这里插入图片描述

编写:stack.yml

mkdir comptest && cd comptest

vi stack.yml

version: '3.1'
services:
  db:
    image: mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

启动服务

sudo docker-compose -f stack.yml up

在这里插入图片描述

Docker网络

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

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

apt-get update

在这里插入图片描述

apt-get install net-tools

在这里插入图片描述

apt-get install iputils-ping -y

在这里插入图片描述

ifconfig and ping

在这里插入图片描述

在这里插入图片描述

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

sudo docker commit unet ubuntu:net

在这里插入图片描述

创建自定义网络

sudo docker network create mynet

在两个窗口创建 u1,u2 容器网络,并使用以下命令

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

在这里插入图片描述

sudo docker run --name u2 --net mynet -it --rm ubuntu:net bash

在这里插入图片描述

两者可以ping通。

在这里插入图片描述

还能ping百度。

在这里插入图片描述

执行以下两条指令:

sudo docker network connect bridge u1

sudo docker network disconnect mynet u1

两个容器直接就ping不通了。

在这里插入图片描述

在这里插入图片描述

但ping百度仍然是可以的。

在这里插入图片描述

Docker 仓库

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

对仓库的登录、标签、上传、下载、删除、运行、退出等操作都正常无误。

容器监控与与日志

检查docker的状态

sudo docker info

在这里插入图片描述

sudo docker info --format {{.ServerVersion}}

在这里插入图片描述

查看容器内进程

在这里插入图片描述

容器详细信息

在这里插入图片描述

在这里插入图片描述

容器日志查看

在这里插入图片描述

在这里插入图片描述

--tail 2用于查看日志的最后两行,实用。

docker图形化管理工具

单节点运行

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

在这里插入图片描述

在这里插入图片描述

Docker Engine API与开发

用 curl 发 docker 客户端命令

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/af48d5dbc00538f67eb4fcdfe8f25068226560656f9f10bd6914c66ad62e99f2/start

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

在这里插入图片描述

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

在这里插入图片描述

实验感受

总的来说,docker还是挺友好的,基本上想用什么服务就能直接拿来用,速度还不赖。但是呢,把课件上的内容 (全都×,大部分√) 实现一遍之后,内容还是蛮多蛮硬核的,要消化还是要一定的时间的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值