初识Docker

2020-08-05  本文已影响0人  谭英智

虚拟化

打破实体结构间不可切割的障碍,从逻辑上分割内存/CPU/网络/存储,使得资源利用最大化

全虚拟化

GuestOS并不知道自己是虚拟机,因为VMM从逻辑上进行了各种资源的分配,并交由GustOS操作。

docker-fullvir

操作系统虚拟化

亦称容器化,将操作系统内核虚拟化,允许用户空间软件实例被分割成几个独立单元,在内核中运行,要求与hostOS同一体系

docker-opervir

优势是占用服务器空间少,几秒钟可以启动完成,弹性扩容

平台虚拟化

docker-platvir

docker特征

docker与虚拟机比较

docker-cmp

架构

docker-arch

client通过命令向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-dsl

Dockerfile构建镜像

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网络

不同的自定义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;

可视化工具

上一篇下一篇

猜你喜欢

热点阅读