服务计算:容器化技术
- 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
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
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 -
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"
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:
2:
3:
4:
5:
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
2.6检查docker的安装:
3:Docker基本操作:
3.1 运行镜像:
- 运行一个简易的ubuntu系统镜像:
- it 参数,通过终端与进程(容器)交互,stdin,stdout,stderr定向到 TTY
- 通过指令exit退出
docker run -it ubuntu bash
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
4:MySQL与容器化
4.1拉取镜像:
使用如下指令拉取,可以看到成功拉到本地:
docker pull mysql:5.7
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:
2:
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,表示容器使用当前主机的网络环境
- 3:mysql客户端基本操作:
创建数据库:
create database test;
使用数据库:
use test;
展示数据库的表:
show tables;
创建表:
CREATE TABLEtablename
(… )
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
2:删除不使用的容器和卷:
dockercontainer prune -f
dockervolume prune
dockervolume ls
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:
2
3:
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-(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:
2:
6:容器监控与日记:
1:检查docker的状态:
docker info
2:检查版本
docker info --format{{.ServerVersion}}
检查容器状态:
docker inspect container-name
docker inspect -f ‘{{.NetworkSettings.IPAddress}}’ id
7:Dockers容器化部署:
7.1编写go程序和编译:
在路径:/home/yymy/gowork/test/test.go编写一个简单代码:
生成可执行文件test:
go build test.go
7.2 运行镜像ubuntu
查看是否有该镜像以及镜像id
docker images
docker ps -a
运行,生成容器godocker;
docker run -p 8888:80 --name godocker -e ENV=“dev” -it f643c /bin/bash
7.3在容器中执行文件:
1:复制文件到容器中:
docker cp /home/yymy/gowork/test/test godocker:/var
2:重新运行容器:并执行可执行文件;输出了信息
docker restart godocker
docker exec -it godocker /bin/bash
./var/test
7.4将容器保存为镜像:
使用命令docker commit可以将容器转化为镜像:
docker commit -m “my godocker” -a “yymy” 44b78992eb61 yymy/test-go:1.0.0
-m 提交的附加信息
-a 用户
查看镜像,可以看到新生成的镜像:
docker images
7.5 将镜像打包:
使用如下命令进行打包,
-o为打包的输出路径
docker save -o /home/yymy/docker/test-go.v1.0.0.tar 913945e94e2e
可以看到成功输出镜像的打包文件:
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