初识Docker
2020-08-05 本文已影响0人
谭英智
虚拟化
打破实体结构间不可切割的障碍,从逻辑上分割内存/CPU/网络/存储,使得资源利用最大化
全虚拟化
GuestOS并不知道自己是虚拟机,因为VMM从逻辑上进行了各种资源的分配,并交由GustOS操作。
docker-fullvir操作系统虚拟化
亦称容器化,将操作系统内核虚拟化,允许用户空间软件实例被分割成几个独立单元,在内核中运行,要求与hostOS同一体系
docker-opervir优势是占用服务器空间少,几秒钟可以启动完成,弹性扩容
平台虚拟化
docker-platvirdocker特征
- 只能运行在底层主机相似的操作系统
- 隔离性不高,会引起安全问题
- 直接运行在操作形同内核上的用户空间
- 占用资源少,启动快
- 直接使用操作系统系统调用
docker与虚拟机比较
docker-cmp架构
docker-archclient通过命令向docker host发起请求,deamon根据命令,操作镜像和容器
docker命令
启动/停止
systemctl start docker
systemctl restart docker
systemctl stop docker
列出镜像
docker images
拉取镜像
docker pull centos/tomcat...
配置镜像加速器
- 阿里云
- docker中国加速器
- USTC加速器
- daocloud/网易蜂巢加速器
vi /etc/docker/demon.json
{
"registry-mirrors": ["url"]
}
systemctl deamon-reload
systemctl restart docker
查找镜像
docker search tomcat
删除镜像
docker rmi name/id
创建交互式容器
docker run -i -t --name=c1 centos /bin/bash
# i:交互式
# t:分配终端
# name:唯一名字
创建守护式容器
docker run -d --name c2 centos /bin/bash
#登录容器
docker exec -it c2 /bin/bash
查看容器
docker ps #当前运行
docker ps -a #所有
docker ps -l #最后一次运行
启动/停止容器
docker start/stop/restart name
查看容器信息
docker inspect name #所有信息
docker inspect -f='{{NetworkSettings.IPAddress}}' #ip信息
删除容器
docker rm name/id #删除一个或多个
docker rm `docker ps -a -q` #删除所有
查看日志
docker logs name/id
文件拷贝
docker cp 1.txt name:/root
docker cp name:/root/2.txt /root
目录挂载
docker run -id --name c4 -v /opt/:/usr/local/myhtml centos
制作镜像
- 创建操作系统基础容器
- 登录容器安装软件,例如tomcat
- docker commit 容器名 name
- docker run -itd --name t1 -p 8888:8080 name /bin/bash #创建容器
- docker exec t1 /usr/local/apache-tomcat/bin/startup.sh #启动tomcat
镜像/容器打包
docker save -o /root/tomcat.tar imageName
scp tomcat.tar otherServer:/root
docker load -i /root/tomcat.tar
docker export -o /root/t1.tar containerName
docker import t1.tar coontainerName:latest
DSL
docker-dslDockerfile构建镜像
mkdir dirName
vi Dockerfile
FROM docker.io/centos
MAINTAINER yingzhi yingzhi@163.com
RUN yum install ...
RUN <install nginx>
docker build -t imageName --rm=true
docker run --t1 -d --name testNginx -p 8899:80 imageName /bin/bash
docker exec testNginx /bin/bash
搭建私有仓库
#启动docker Registry
docker run -d \
-p 5000:5000
--restart=alaways \
-name registry \
-v /mnt/registry:/var/lib/registry \
registry:2
#d:后台运行
#p:端口映射
#restart=alaways:启动后自动启动本地私有仓库
#name:命名
#v:目录挂载
docker tag imageName:lastest registryIp:5000/reproName
docker push registryIp:5000/reproName
#查看本地仓库
http://registryIp:5000/v2/reproName/tags/list
ls /mnt/registry/docker/registry/v2/reproName
查看docker网络
docker network ls
docker inspect name
docker network inspect bridge
- bridge网络,docker跟host的docker0网卡通讯,docker0跟外网通讯
自定义网络
可以自定义bridge网络/overlay网络
- 对于单主机小型docker,建议使用bridge网络
- 对于集群并不对外服务的,使用overlay网络
- 否则使用Custom network plugins定制网络插件
不同的自定义bridge网络,会组成不同的局域网段,彼此不能通讯
docker swarm集群
一群docker,向外统一提供服务,api与docker deamon一致
docker-swarm创建manager
docker swarm init --advertise-addr ip
#会返回管理节点的加入命令与工作节点的加入命令
查看集群信息
docker node ls
创建Nginx服务
#建立网络
docker network create -d=overlay myNet
#建立nginx
docker service create \
--network myNet \
--name my-web \
-p 8080:80 \
--replicas 2 \
nginx
#查看
docker service ps my-web
#nginx有可能落在manager上,也可能落在worker上
docker compose
dockerfile/容器创建/网络管理/vol分配/环境变量整合到一个yml文件中,只需一条命令,就可以把整个集群建立起来
#安装 略
- 编写Dockerfile
- 编写docker-compose.yml
- 运行docker-compose up
yml例子:
version: '1'
services:
db:
image:mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:lastest
ports:
- "8001:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data;
可视化工具
- docker ui (local)
- portainer (local/remote)
- DaoCloud (fee)