docker介绍使用
1 介绍
Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。
用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助docker解决的主要是以下4个问题:
-
隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法给出的方法是VM, LXC给出的方法是container,更细一点是kernel namespace
-
可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU, memory可以方便实现, LXC则主要是利用cgroups来控制资源
-
移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用AUFS实现
-
安全性 - 这个话题比较大,这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的, 然而对于LXC, 用户的进程是lxc-start进程的子进程, 只是在Kernel的namespace中隔离的, 因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵, dotcloud(主要是)利用kernel grsec patch解决的.
LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。
2 docker使用
2.1. 安装docker (centos)
1)卸载旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2)先安装docker仓库
// 安装yum-utils提供yum-config-manager工具
sudo yum install -y yum-utils
//配置仓库地址,这里配置阿里云镜像地址 sudo yum-config-manager \ --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)安装docker
# ce社区版
sudo yum install docker-ce docker-ce-cli containerd.io
4)启动docker
sudo systemctl start docker
5)运行hello world镜像
sudo docker run hello-world
6)配置阿里云镜像仓库
# 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://1ov2f3xx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2.2. 使用docker容器运行应用
1. 启动一个容器运行镜像
docker run -d -p 80:80 docker/getting-started
-d- run the container in detached mode (in the background)-p 80:80- map port 80 of the host to port 80 in the containerdocker/getting-started- the image to use,先从本地获取,如果本地没有则从远程拉取
2. 容器之间可能需要互相访问,如一个应用程序需要访问mysql数据库
1)创建一个桥接模式局域网
应用程序容器和数据库容器绑定到同一个局域网中
docker network create mynet
2)启动数据库容器
docker run -d \
--network mynet --network-alias mysql \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=todos \
mysql:5.7
-v:本地目录文件到容器文件映射。
3)登陆容器中的数据库
hebinhuadeMacBook-Pro:docker tency$ docker exec -it 99f2f430e885 mysql -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.33 MySQL Community Server (GPL) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | todos | +--------------------+ 5 rows in set (0.01 sec)
2.3 服务编排
1. 查看docker-compose版本
docker-compose version
2. 创建docker-compose.yml文件
1)确定compose-file版本跟docker引擎版本对应,查看:https://docs.docker.com/compose/compose-file/
version: "3.7"
2)编辑docker-compose.yml文件
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: secret
MYSQL_DB: todos
mysql:
image: mysql:5.7
volumes:
- todo-mysql-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: todos
volumes:
todo-mysql-data:
3)启动应用容器命名docker-compose up
docker-compose up -d
-d: 后台挂起
2. 查看编排镜像命令
docker image history docker/getting-started
参考docker官网:https://docs.docker.com/

浙公网安备 33010602011771号