服务计算:容器化技术

  • 1:Docker安装:
  • 1.1卸载旧版本的docker:
  • 2.1:支持使用https协议的仓库:
  • 2.2 添加GPG key:
  • 2.3:添加docker镜像源:
  • 2.4安装指定版本的docker-ce:
  • 2.5设置docker启动参数:
  • 2.6检查docker的安装:
  • 3:Docker基本操作:
  • 3.1 运行镜像:
  • 3.2基本操作:
  • 4:MySQL与容器化
  • 4.1拉取镜像:
  • 4.2配置容器构建文件Dockerfile
  • 4.3 使用MySQL容器:
  • 4.4查看数据库文件:
  • 4.5volume创建卷并挂载:
  • 5:Docker compose 多容器自动化部署:
  • 5.1:下载docker compose:
  • 6:容器监控与日记:
  • 7:Dockers容器化部署:
  • 7.1编写go程序和编译:
  • 7.2 运行镜像ubuntu
  • 7.3在容器中执行文件:
  • 7.4将容器保存为镜像:
  • 7.5 将镜像打包:
  • 7.6本地导入镜像包:


1:Docker安装:

1.1卸载旧版本的docker:

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

  • 同时还需要卸载Docker Engine和删除以前的配置文件、容器和卷等等:

sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/systemd/system/docker.service.d

CM容器化啥意思_Docker


CM容器化啥意思_Docker_02

2.1:支持使用https协议的仓库:

  • 更新apt 包以及安装包使得apt命令可以使用来自https的源仓库:
$ sudo apt-get update
  	$ sudo apt-get install \
  	    apt-transport-https \
  	    ca-certificates \
  	    curl \
  	    gnupg-agent \
  	    software-properties-common

CM容器化啥意思_Docker_03

2.2 添加GPG key:

官方:

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

验证密钥:

sudo apt-key fingerprint 0EBFCD88

如果访问官方的网站不稳定,使用阿里云的:

$ curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

CM容器化啥意思_docker_04

2.3:添加docker镜像源:

  • 建议使用阿里云的镜像源:
$ sudo add-apt-repository \
     "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
     $(lsb_release -cs) \
     stable"
  • 官方的镜像源如下:
sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"

CM容器化啥意思_CM容器化啥意思_05

2.4安装指定版本的docker-ce:

  • 1:查看可用版本:

apt-cache madison docker-ce

  • 2:选择安装版本18.03.1:

$ sudo apt-get install -y docker-ce=18.03.1ce3-0~ubuntu

  • 3:启动并设置开机自启动docker:

$ sudo systemctl enable docker && sudo systemctl start docker

  • 4:将当前登录用户添加入docker用户组中:

$ sudo usermod -aG docker yymy

  • 5:运行镜像hello-world以检测docker是否成功安装:成功运行:

sudo docker run hello-world

1:

CM容器化啥意思_docker_06


2:

CM容器化啥意思_Docker_07

3:

CM容器化啥意思_CM容器化啥意思_08


4:

CM容器化啥意思_mysql_09

5:

CM容器化啥意思_docker_10

2.5设置docker启动参数:

  • 设置阿里云镜像库加速dockerhub的镜像。国内访问dockerhub不稳定,将对dockerhub的镜像拉取代理到阿里云镜像库
  • 配上1.3.2的禁用iptables的设置
  • 如果想让podIP可路由的话,设置docker不再对podIP做MASQUERADE,否则docker会将podIP这个源地址SNAT成nodeIP
  • 设置docker存储驱动为overlay2(需要linux kernel版本在4.0以上,docker版本大于1.12)
  • 根据业务规划修改容器实例存储根路径(默认路径是/var/lib/docker)

配置如下:

$ sudo tee /etc/docker/daemon.json <<-'EOF'
		{
		 "registry-mirrors":[
		 "https://kfwkfulq.mirror.aliyuncs.com",
		 "https://2lqq34jg.mirror.aliyuncs.com",
		 "https://pee6w651.mirror.aliyuncs.com",
		 "https://registry.docker-cn.com",
		 "http://hub-mirror.c.163.com"
		],
		 "iptables": false,
		 "ip-masq": false,
		 "storage-driver": "overlay2",
		 "graph": "/home/yymy/docker"
		}
		EOF
		
		$ sudo systemctl restart docker

CM容器化啥意思_docker_11

2.6检查docker的安装:

CM容器化啥意思_mysql_12

3:Docker基本操作:

3.1 运行镜像:

  • 运行一个简易的ubuntu系统镜像:
  • it 参数,通过终端与进程(容器)交互,stdin,stdout,stderr定向到 TTY
  • 通过指令exit退出

docker run -it ubuntu bash

CM容器化啥意思_Docker_13

3.2基本操作:

1:显示本地镜像库内容:

docker images

2:获得帮助:

docker help

3:显示运行中的容器:

docker ps

4:显示所有的容器(包括已停止)

docker ps -a

5:删除镜像:

docker rmi

6: 删除容器:

docker rm container-id/name

7: 重启容器:

docker restart container-id/name

8:停止容器:

docker stop container-id

CM容器化啥意思_docker_14

4:MySQL与容器化

4.1拉取镜像:

使用如下指令拉取,可以看到成功拉到本地:

docker pull mysql:5.7

CM容器化啥意思_mysql_15

4.2配置容器构建文件Dockerfile

  • 1:创建文件dockerfile:

mkdir /home/yymy/docker &&cd docker
gedit dockerfile

  • 2:录入如下内容:
FROM ubuntu
  ENTRYPOINT ["top", "-b"]
  CMD ["-c"]
  • 3:在该目录下构建镜像:

sudo doker build -t hello .

  • 4:运行镜像:

docker run -it --rm hello -H

1:

CM容器化啥意思_docker_16


2:

CM容器化啥意思_mysql_17

4.3 使用MySQL容器:

1:启动服务器:

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

-p:端口映射。将容器的3306端口映射到宿主机的3306端口。[宿主机]:[容器]
-e:设置环境变量。这里是设置root账号的密码为root
–name:将容器命名为mysql2

2:启动MySQL客户端:

dockerrun -it --net host mysql:5.7 “sh”
mysql -h127.0.0.b1 -P3306 -uroot-proot

-it 等价于 -i -t ,表示使用当前 stdin 和 stdout 作为该进程的 io
–rm , 当该进程结束时,自动清理该容器的文件系统空间
–net host,表示容器使用当前主机的网络环境

CM容器化啥意思_docker_18

  • 3:mysql客户端基本操作:
    创建数据库:
    create database test;
    使用数据库:
    use test;
    展示数据库的表:
    show tables;
    创建表:
    CREATE TABLE tablename (… )

CM容器化啥意思_CM容器化啥意思_19

4.4查看数据库文件:

1:通过命令docker info,查看如下条目可得到文件储存的相关信息;

Docker Root Dir: /home/yymy/docker
也就是说文件是挂载在路径/home/yymy/docker下:

运行容器,

docker restart mysql2
docker exec -it mysql2 bash

查看文件:

ls /var/lib/mysql

CM容器化啥意思_docker_20


2:删除不使用的容器和卷:

dockercontainer prune -f
dockervolume prune
dockervolume ls

CM容器化啥意思_CM容器化啥意思_21

4.5volume创建卷并挂载:

创建卷mydb:

docker rm $(docker ps -a -q) -f -v
dockervolume create mydb

再次运行,挂载了新创建的卷

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

检查卷,发现新创建了卷mydb,并挂载在/home/yymy/docker/volumes下面:

docker volume ls

1:

CM容器化啥意思_Docker_22


2

CM容器化啥意思_mysql_23


3:

CM容器化啥意思_CM容器化啥意思_24

5:Docker compose 多容器自动化部署:

5.1:下载docker compose:

  • Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:https://github.com/docker/compose/releases。
    运行以下命令以下载 Docker Compose 的当前稳定版本:

sudo curl -L “https://github.com/docker/compose/releases/download/1.24.1/docker-compose-CM容器化啥意思_mysql_25(uname -m)” -o /usr/local/bin/docker-compose

要安装其他版本的 Compose,请替换 1.24.1。将可执行权限应用于二进制文件:

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

创建软链:

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

测试是否安装成功:

$ docker-compose --version

编写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

1:

CM容器化啥意思_mysql_26

2:

CM容器化啥意思_mysql_27

6:容器监控与日记:

1:检查docker的状态:

docker info
2:检查版本
docker info --format{{.ServerVersion}}
检查容器状态:
docker inspect container-name
docker inspect -f ‘{{.NetworkSettings.IPAddress}}’ id

CM容器化啥意思_mysql_28

CM容器化啥意思_CM容器化啥意思_29

CM容器化啥意思_mysql_30

7:Dockers容器化部署:

7.1编写go程序和编译:

在路径:/home/yymy/gowork/test/test.go编写一个简单代码:
生成可执行文件test:

go build test.go

CM容器化啥意思_Docker_31

7.2 运行镜像ubuntu

查看是否有该镜像以及镜像id

docker images
docker ps -a
运行,生成容器godocker;
docker run -p 8888:80 --name godocker -e ENV=“dev” -it f643c /bin/bash

CM容器化啥意思_mysql_32


CM容器化啥意思_docker_33

7.3在容器中执行文件:

1:复制文件到容器中:

docker cp /home/yymy/gowork/test/test godocker:/var

2:重新运行容器:并执行可执行文件;输出了信息

docker restart godocker
docker exec -it godocker /bin/bash
./var/test

CM容器化啥意思_docker_34

7.4将容器保存为镜像:

使用命令docker commit可以将容器转化为镜像:

docker commit -m “my godocker” -a “yymy” 44b78992eb61 yymy/test-go:1.0.0
-m 提交的附加信息
-a 用户

查看镜像,可以看到新生成的镜像:

docker images

CM容器化啥意思_CM容器化啥意思_35

7.5 将镜像打包:

使用如下命令进行打包,
-o为打包的输出路径

docker save -o /home/yymy/docker/test-go.v1.0.0.tar 913945e94e2e

可以看到成功输出镜像的打包文件:

CM容器化啥意思_mysql_36

7.6本地导入镜像包:

1: 先删除正在运行的容器和镜像:

docker stop
docker rm
docker rmi

2:导入镜像:

docker load < /home/yymy/docker/test-go.v1.0.0.tar
docker images

3:再次运行可执行文件

docker run -it 913945e994e2e /bin/bash
./var/test

CM容器化啥意思_mysql_37