容器化技术与容器服务
-
- Docker环境配置
-
- 准备Docker环境
- 运行Docker
- 运行镜像
- Docker基本操作
-
- 显示本地镜像库内容
- 获得帮助
- 显示运行中的容器
- 显示所有容器(包含已中止)
- 继续运行原容器并进入
- mysql容器构建与应用容器化
-
- 拉取 MySQL 镜像
- 构建Docker镜像
- 使用mysql容器
- Docker compose 与多容器应用自动化部署
- Docker网络
- 容器监控与与日志
- Docker图形化管理工具
- Docker Engine API与开发
Docker环境配置
准备Docker环境
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 --nogpgcheck
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPn1UMNpXT4VEROBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzgjNxAjN0MjM4IjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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
Docker基本操作
显示本地镜像库内容
sudo docker images
获得帮助
sudo docker --help
显示运行中的容器
显示所有容器(包含已中止)
sudo docker ps -a
继续运行原容器并进入
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
启动 MySQL 客户端
mysql -h127.0.0.1 -P3306 -uroot -proot
使用MySQL容器(挂载卷保存db)
数据库文件在哪里?
ls /var/lib/mysql
Dockerfile 的 VOLUME /var/lib/mysql 的含义
sudo docker container prune -f
sudo docker volume prune
- 每次启动 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
启动客户端容器链接服务器
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 容器
apt-get update
apt-get install net-tools
apt-get install iputils-ping -y
启动另一个命令窗口,由容器制作镜像
sudo docker commit unet ubuntu:net
创建自定义网络
sudo docker network create mynet
在两个窗口创建 u1,u2 容器网络,并使用以下命令
两者可以ping通。
执行以下两条指令:
sudo docker network connect bridge u1
sudo docker network disconnect mynet u1
两个容器直接就ping不通了。
容器监控与与日志
检查docker的状态
sudo docker info
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/08ade47e480e84c4296f4e775a95eb3d11350bad585318c33e3f82559cf5b4a0/start
sudo curl --unix-socket /var/run/docker.sock -X POST http://localhost/v1.41/containers/08ade47e480e84c4296f4e775a95eb3d11350bad585318c33e3f82559cf5b4a0/wait