服务计算:基础设施,容器作为服务(CaaS)

服务计算:docker与应用容器化

实验环境

Ubuntu16.04

容器的含义

容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

容器由两部分组成:

  1. 应用程序本身
  2. 依赖:比如应用程序需要的库或其他软件

容器在 Host 操作系统的用户空间中运行,与操作系统的其他进程隔离。

img

安装步骤

  • 1.更新Ubuntu的apt源索引

sudo apt-get update

  • 2.安装包允许apt通过HTTPS使用仓库

sudo dpkg --configure -a

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

  • 3.添加Docker官方GPG key

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

  • 4.设置Docker稳定版仓库

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

  • 5.更新apt源索引

sudo apt-get update

  • 6.安装最新版本Docker CE(社区版)

sudo apt-get install docker-ce

  • 查看安装Docker的版本

docker --version

在这里插入图片描述

  • 检查Docker CE 是否安装正确

由于下载速度很慢建议去https://www.daocloud.io/mirror配置镜像之后重启docker服务再下载

sudo docker run hello-world

在这里插入图片描述

  • 运行第一个容器

sudo docker run -d -p 80:80 httpd

在这里插入图片描述

基本命令

可以使用docker --help

# 启动docker
sudo service docker start

# 停止docker
sudo service docker stop

# 重启docker
sudo service docker restart

# 列出镜像
docker image ls

# 拉取镜像
docker image pull library/hello-world

# 删除镜像
docker image rm 镜像id/镜像ID

# 创建容器
docker run [选项参数] 镜像名 [命令]

# 停止一个已经在运行的容器
docker container stop 容器名或容器id

# 启动一个已经停止的容器
docker container start 容器名或容器id

# kill掉一个已经在运行的容器
docker container kill 容器名或容器id

# 删除容器
docker container rm 容器名或容器id

MySQL与容器化

  • 拉取 MySQL 镜像

sudo docker pull mysql:5.7

在这里插入图片描述

查看镜像

sudo docker images

在这里插入图片描述

–Repository: mysql

–Tag: 5.7

–Image ID: 1e4405fe1ea9

  • 远程仓库

–官方仓库: https://hub.docker.com/_/mysql/

–格式:https://registry/user/repo

–仓库中保存若干版本镜像,每个镜像对应一个 tag, 默认的 tag 是 lastest

–每个镜像有 github 上 Dockfile 生成

  • MySQL 容器构建文件 Dockerfile

https://github.com/docker-library/mysql/blob/master/5.7/Dockerfile

  • Dockerfile 常见指令(按指令出现顺序)

–FROM base_image

–RUN shell_commands

–ENV env_vars

–VOLUME path

–COPY source destination

–ENTRYPOINT [“executable”,”parm1”, ”parm2”,…]

–EXPOSE ports

–CMD [“executable”,”parm1”, *”*parm2”,…]

  • 构建docker镜像练习

mkdir mydock && cd mydock

gedit 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 3310:3310 --name mysql3 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
在这里插入图片描述
查看容器

sudo docker ps

在这里插入图片描述

–启动 MySQL 客户端

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

sudo mysql -h127.0.0.1 -P3310 -uroot -proot

在这里插入图片描述
–mysql 客户端基本操作

https://blog.csdn.net/pmlpml/article/details/78602290

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

此处可开启另外一个终端

–数据库文件在哪里?

sudo docker exec -it mysql2 bash

ls /var/lib/mysql

在这里插入图片描述
–Dockerfile 的 VOLUME /var/lib/mysql 的含义

sudo docker container prune -f

在这里插入图片描述

sudo docker volume prune –f

在这里插入图片描述

sudo docker volume ls

在这里插入图片描述

每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置

这个卷在主机(host)的 /var/lib/docker/volumes/ 目录下

  • 创建卷并挂载

sudo docker rm $(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

env

mysql -hmysql -P3306 -uroot -proot

–注意:这里使用了 --link 连接两个容器

–客户端容器内可以使用 mysql 这个别名访问服务器

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

-安装dockercompose

安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
-查看是否安装成功

docker-compose -v
在这里插入图片描述

-编写stack.yml

mkdir comptest && cd comptest

内容:

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 容器

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

    apt-get update

    apt-get install net-tools

    apt-get install iputils-ping -y

    ifconfig

在这里插入图片描述

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

    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

    ~]# sudo docker info u1

    ~]# sudo docker network connect bridge u1

    ~]# sudo docker network disconnect mynet u1

容器监控与与日志

  • 检查docker的状态

    sudo docker info

在这里插入图片描述

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

在这里插入图片描述

  • 查看容器内进程

–Docker top

在这里插入图片描述

加上容器的id就可以查看容器内进程

–Docker stats
在这里插入图片描述

  • 容器详细信息

    sudo docker inspect

在这里插入图片描述

容器监控与与日志

  • 容器日志查看

    sudo docker log+容器id

在这里插入图片描述

docker图形化管理工具

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

单节点运行
在这里插入图片描述

总结

容器化是革命性的技术,涉及 cncf 技术框架的方方面面,在一台PC上一键部署服务集群成为现实,使得 DevOps 以及 CI/CD 易于实施,使得分布式系统测试与研究更加高效。

容器即服务,为云服务计算提供基石

所谓云原生技术,即是将容器部署于服务器集群的技术

猜你喜欢

转载自blog.csdn.net/qq_39681297/article/details/103556219