docker

常见容器

web容器/web中间件: nginx apache html php java tomcat python
nginx+tomcat+jdk    (weblogic)
nginx+php-fpm
nginx+uwsgi+django
mycat mysql-proxy

容器:应用封装和交付

Cgroups(Ccontrol Groups)-资源管理

NameSpace-进程隔离

SELinux安全

 

docker    ---轻量级虚拟机,共享宿主机内核,秒级启动,基于进程隔离

  rd开发产品(在docker容器里配置开发环境)

  把容器打包成镜像,运维上线

 

docker支持将应用打包进一个可以移植的容器中,核心理念:Build once ,Run anywhere  

> 标准化应用发布,docker容器包含了运行环境和可执行程序,可跨平台主机使用
> 节约时间,快速部署和启动,VM启动是分钟级别,docker容器是秒级
> 节约成本,一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到M级
> 方便持续集成,通过与代码进行关联是持续集成非常方便
> 可以作为集群系统的清量主机或节点
> 方便构建基于SOQ架构或微服务架构的系统,通过服务编排,更好的松耦合

 

CI/CD 持续集成/持续发布

rd(开发功能代码--git)--->git主库--->jenkins服务器(git)--->maven(编译打包测试)--->sshpush(发布代码到线上服务器--->远程执行线上服务器的发布脚本

 

docker优势

>交付标准化
>一次构建,多次交付
>应用隔离

 

docker3大核心组件

Docker镜像(images):类似于虚拟机的镜像,是一个面向Docker引擎的只读模板,包含了文件系统。

Docker容器(repository):通过Docker镜像实例化的一个可运行的简易版的Linux系统环境。

Docker仓库(containers):是Docker集中存放镜像文件的场所。

公有库:docker.io

私有库:

docker国内仓库: 

  - aliyun

  -daocloud.io

  .quay.io

hub.docker.com

 docker镜像加速:

vim /etc/docker/daemon.json

{
    'registry-mirror': ['https://registry.docker-cn.com']
}

 

 

下载镜像

 

[root@docker ~]# docker pull daocloud.io/library/centos:7

[root@docker ~]# docker pull daocloud.io/library/nginx:latest

[root@docker ~]# docker images               # 查看已有的docker镜像

 

centos:7(父镜像)----run容器---安装nginx---打包成镜像(子镜像)---run容器

Dcoker镜像的构建

Docker镜像构建的意义:

构建镜像,可以保存对容器的设置、修改,并可移植化的使用;提供了自定义镜像的能力,以软件的形式打包并奋发服务及运行环境
构建镜像的方法:

docker commit:通过容器构建

docker build:通过Dockerfile文件构建

 

docker四种网络模式

1 host模式
Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount
Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network
Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
 2 container模式
在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network
Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
 3 none模式
这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
 4 bridge模式
bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。下面着重介绍一下此模式。host模式
使用Docker run时使用–net=host指定 Docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip。

 

基本使用

docker info                      # 产看docker基本信息
docker images # 查看镜像
docker ps -q # 只查看镜像id
docker ps-l # 列出最近一次启动的容器 docker search centos   # 查找镜像 docker help search # 查找帮助 man docker-search   # 帮助  docker inspect # 查看底层信息 docker push img # 上传镜像 docker pull img   # 下载镜像 docker history img # 查看镜像历史 docker tag # 修改镜像名称和标签(实际上类似于软连接)

 

镜像的备份与恢复

[root@docker02 ~]# docker save busybox:latest >busybox.tar        # 备份        名称:标签==唯一
[root@docker01 ~]# docker load < busybox.tar             # 恢复
[root@docker01 ~]# docker rmi busybox:latest              # 删除镜像

 

启动镜像生成容器  

#[root@docker01 docker_images]# docker run -it img_name:img_tag cmd
#  cmd 为容器内命令
[root@docker01 docker_images]# docker run -it centos:latest /bin/bash
[root@e00f4e1276ff /]# 

[root@docker01 ~]# docker run -it busybox        # 没写命令则运行默认命令,没写标签则使用默认标签latest
/ #

查看正在运行中的容器

[root@docker01 ~]# docker ps     #  docker ps -a  #显示所有容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
070016611b64        nginx               "/bin/bash"         7 seconds ago       Up 4 seconds        80/tcp, 443/tcp     modest_curie

 

docker start | stop | restart                       # 启动/关闭/重启动容器

docker run 

    -i 交互

    -t 终端

    -d 后台进程

docker attach|exec            # 进入容器

docker top                         # 查看容器进程列表

docker rm                        # 删除容器

docker ps -aq       # 只显示id

docker rm $(docker ps -aq)                  #  批量删除  (将docker ps -aq的结果做为docker rm 的参数

docker cp localpath contaniner:path   # 将本地的文件拷贝到docker容器中

docker cp containner:path localpath

 

[root@docker01 ~]# docker run -itd nginx
[root@docker01 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
5d4c08e376a9        nginx               "nginx -g 'daemon off"   17 seconds ago      Up 14 seconds       80/tcp, 443/tcp     small_mirzakhani
[root@docker01 ~]# docker inspect 5d4c08e376a9
[root@docker01 ~]# curl 172.17.0.2
[root@docker01 ~]# docker top 5d4c08e376a9                                                                                                                                                          ★ --虚拟机--★ 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4575                4562                0                   16:46               pts/2               00:00:00            nginx: master process nginx -g daemon off;
104                 4591                4575                0                   16:46               pts/2               00:00:00            nginx: worker process

 

docker exec  #   进入容器

[root@docker01 ~]# docker run -itd centos
9129436603f4a513c0a798820305457981d002096ff0921dee7feb57364a393f
[root@docker01 ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
9129436603f4        centos              "/bin/bash"              8 seconds ago       Up 6 seconds                            gigantic_leakey
5d4c08e376a9        nginx               "nginx -g 'daemon off"   23 minutes ago      Up 23 minutes       80/tcp, 443/tcp     small_mirzakhani
[root@docker01 ~]# docker exec -it 9129436603f4 /bin/bash
[root@9129436603f4 /]# ps -efww
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 09:09 ?        00:00:00 /bin/bash
root        14     0  0 09:10 ?        00:00:00 /bin/bash
root        26    14  0 09:11 ?        00:00:00 ps -efww

docker attach            # 进入容器 ,退出会关闭容器

ctrl+PQ                     # 退出

 

posted @ 2019-02-18 18:48  Ray_chen  阅读(290)  评论(1编辑  收藏  举报