容器化技术与容器服务实践报告

容器化技术与容器服务实践报告

体验docker容器

基础操作

查看docker的版本
sudo docker version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tsymng5y-1609162771264)(pic/1.png)]

运行镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxifQd5v-1609162771270)(pic/2.png)]

运行镜像且与容器进行交互

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuRLOGvT-1609162771273)(pic/3.png)]

显示本地镜像库
sudo docker images

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u0MyHoxL-1609162771277)(pic/4.png)]

获取帮助
sudo docker --help

包含基本选项、管理命令、常用命令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UBN3YN4f-1609162771279)(pic/5.png)]

显示所有容器
sudo docker ps -a

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bu7RKxMt-1609162771282)(pic/6.png)]

继续运行原容器并进入

继续运行

sudo docker restart 名字/容器ID

进入容器

sudo docker attach 名字/容器ID

容器ID支持缩写,如下图所示容器76c2a11af2d5在指令中以76c表示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g1JY6V9T-1609162771283)(pic/7.png)]

dockerfile简单介绍

FROM:定制的镜像都是基于 FROM 的镜像

FROM golang:1.15.3 as build

RUN:用于执行后面跟着的命令行命令。

RUN go build .

COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

ADD:ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似

ADD . $GOPATH/src/server

CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

  • CMD 在docker run 时运行。
  • RUN 是在 docker build。

ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

ENTRYPOINT ["./server"]

ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。

ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct

VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

EXPOSE:仅仅只是声明端口。

WORKDIR:指定工作目录。

WORKDIR $GOPATH/src/server

MySQL与容器化

拉取MySQL镜像
sudo docker pull mysql:5.7

注意:我之前已经pull过一遍了,所以大量显示Already exists,但可以注意到命令也会自动访问云端然后更新本地版本,如下图所示;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-agH1gqDe-1609162771284)(pic/8.png)]

通过dockerfile构建docker镜像

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]
sudo docker build . -t hello

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B3hLeCeB-1609162771285)(pic/9.png)]

  • 运行该镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iTg7SKrw-1609162771286)(pic/10.png)]

使用MySQL容器
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBr59YsA-1609162771287)(pic/11.png)]

启动MySQL客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bv8XxiF8-1609162771288)(pic/12.png)]

查看数据库文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d79qXnfB-1609162771289)(pic/13.png)]

操作VOLUME

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0D6T8Vv-1609162771290)(pic/14.png)]

创建卷并挂载

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUGLQQxX-1609162771291)(pic/15.png)]

启动客户端容器

(注意这里使用了–link,所以不暴露接口,而在后面使用容器别名来访问MySQL服务器)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JFgrGeuy-1609162771293)(pic/16.png)]

客户端链接服务器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mABX2fz8-1609162771294)(pic/17.png)]

Docker compose

安装

sudo apt install docker-compose

注意:安装后docker damon无法启动,由于该问题无法复现,无法肯定原因是什么,但是重启电脑后docker就可以正常运行了,故怀疑与docker-compose相关;

编写.yml

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

运行

docker-compose -f stack.yml up

报错

ERROR: yaml.scanner.ScannerError: mapping values are not allowed here in "./stack.yml", line 2, column 9

查阅发现: .yml要求每个冒号 和每个 - 符号后面必须有一个空格

且不允许\t

修改后重新运行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ieKiZZt9-1609162771295)(pic/18.png)]

成功!

Docker网络

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KcLAHL3S-1609162771296)(pic/19.png)]

备制支持 ifconfig 和 ping 命令的 ubuntu 容器
sudo docker run --name unet -it --rm ubuntu bash

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ogiHyLwE-1609162771298)(pic/20.png)]

sudo docker commit unet ubuntu:net

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lB7hi8VS-1609162771299)(pic/21.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xMGVaYX7-1609162771300)(pic/22.png)]

sudo docker inspect xxx

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9cb4ztO7-1609162771301)(pic/23.png)]

阿里云容器镜像服务

在这里插入图片描述

尝试上传

在这里插入图片描述

成功!

基本指令汇总

登录

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

拉取

sudo docker pull registry.cn-shenzhen.aliyuncs.com/nonoli/qt-sc-server:[镜像版本号]

推送

$ sudo docker login --username=nonolizh registry.cn-shenzhen.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/nonoli/qt-sc-server:[镜像版本号]
$ sudo docker push registry.cn-shenzhen.aliyuncs.com/nonoli/qt-sc-server:[镜像版本号]

容器监控与日志

在这里插入图片描述

在这里插入图片描述

附录1:修改docker中的MySQL的编码

新建mysqld.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character_set_server=utf8
init_connect='SET NAMES utf8'
max_allowed_packet = 20M

[mysql]
default-character-set = utf8

[mysql.server]
default-character-set = utf8

[mysqld_safe]
default-character-set = utf8

[client]
default-character-set = utf8

将该文件复制到docker中的指定位置

sudo docker cp /usr/soft/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/

重启容器

sudo docker restart xxx

可以注意到MySQL的编码成功改为utf8

附录2:docker访问宿主机网络

问题:docker虽然默认在同一个网络中(见上文的docker网络),但本地的golang程序代码中都是写localhost的,而部署在docker后它们有不同的IP,不再能使用localhost;

解决1:将localhost改为IP地址,即修改代码;

解决2:

docker run -d --network host xxxx

直接让容器与宿主机共享网络,然后让其它容器使用-p来暴露端口,容器中的localhost就能访问这些暴露端口,保证程序成功运行;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值