Docker容器技术基础篇

来源:互联网 发布:mac rebel什么质地 编辑:程序博客网 时间:2024/05/06 18:44

简介

1、定义

Docker是通过内核(linux内核)虚拟化技术(namespaces及cgroup等)来提供容器的资源隔离和安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。

2、Docker组成部分

客户端和服务端

3、Docker组件

镜像(image)、容器(container)、仓库(repository)

4、Docker的用途

①简化配置(simplifying configuration)
②代码流水线管理(code pipeline management)
③开发效率(developer productivity)
④应用隔离(app lsolation)
⑤服务器整合(server consolidation)
⑥调试能力(debugging capabilities)
⑦多租户(multi-tenacy)
⑧快速部署(rapid deployment)

5、使用Docker的理由

①技术储备
②无技术栈和技术债 (主要是创业公司,没钱,宕机了可能承受)
③跟上节奏,提升自身技术
④符合当前业务需求
⑤快

6、docker改变了什么

面向产品:产品交付
面向开发:简化环境配置
面向测试:多版本测试(多分支测试)
面向运维:环境一致性(saltstack保证不了,环境回退)
面向架构:自动化扩容(微服务)

镜像(image)

1、安装并启动docker

[root@liunx-node1 ~]# yum -y install docker[root@liunx-node1 ~]# systemctl start docker

这里写图片描述

2、下载docker镜像

[root@liunx-node1 ~]# docker pull centos    #获取docker的centos镜像,更多docker镜像请参照docker官网[root@liunx-node1 ~]# docker save centos(镜像名称或者id) > /opt/centos.tag.gz  (自定义名称)[root@liunx-node1 ~]# docker load < /opt/centos.tag.gz    #导入镜像

3、查看docker镜像

[root@liunx-node1 ~]# docker images     #每一个镜像都有一个唯一的image id

4、查看帮助

[root@liunx-node1 ~]# docker run --help[root@liunx-node1 ~]# docker images --help

5、删除docker镜像

[root@liunx-node1 ~]# docker rmi 196e0ce0c9fb    #后面是docker 的id

6、查看启动的docker

[root@liunx-node1 ~]# docker ps -a 

7、创建并启动容器,但是这个就立刻就退出了

[root@liunx-node1 ~]# docker run centos(这个是镜像的名称) /bin/echo 'hehe'   (后面这个是命令) 

总结:
搜索镜像:docker search 镜像名称
获取镜像:docker pull 镜像名称
查看镜像:docker images
删除镜像:docker rmi 镜像id

容器(container)

1、创建容器,并进行操作(下面的命令就是进入到docker里面了)

[root@liunx-node1 ~]# docker run --name mydocker -t -i centos /bin/bash

备注:
–name:指定名称,自定义的
-t:分配一个伪终端tty
-i:让容器的标准输入保持打开状态,和 -t 一定要连用
centos:镜像的名称
/bin/bash:执行的命令,这个是启动容器的时候,让它执行的
启动的时候所做的事情:首先检查centos这个镜像本地有没有,如果没有,它自己就会从dockerhub下载,然后再启动–>利用centos镜像启动容器

2、在docker内部的基本操作

[root@8884f791ef60 /]# ps aux    #查看,进程和主机名一样的[root@8884f791ef60 /]# exit      #退出

3、重新启动docker

[root@liunx-node1 ~]# docker ps -a              #查看所有的容器,包括运行和不运行[root@liunx-node1 ~]# docker start docker_id    #重新启动docker[root@liunx-node1 ~]# docker attach docker_id    #进入容器,但是这个操作是同步的,如果执行exit,容器就退出了,所以它适合单进程的

4、进入docker后,执行exit,容器还在运行

命令:nsenter(yum -y install util-linux)   #通过这个命令也可以进入,但是这个需要docker的pid,建议采用这种方式[root@liunx-node1 ~]# docker inspect --format "{{.State.Pid}}" docker_id     #获取容器的pid[root@liunx-node1 ~]# nsenter -t pid -u -i -n -p        #这样就进去了,如果执行exit,容器也在与运行

这里写图片描述
5、删除[正在运行的]容器

[root@liunx-node1 ~]# docker rm [-f] docker_id [root@liunx-node1 ~]# docker run --rm centos /bin/echo 'hehe'    #容器停止后自动删除[root@liunx-node1 ~]# docker kill $(docker ps -a -q)            #杀掉所有的docker进程

总结
启动容器:docker run –name -h hostname | docker start
停止容器:docker stop docker_id
查看容器:docker ps -a -l
进入容器:docker exec | docker attach | nsenter
删除容器:docker rm docker_id

网络访问(network)

1、启动容器

[root@liunx-node1 ~]# docker pull nginx     #导入nginx镜像[root@liunx-node1 ~]# docker run -d -P nginx(镜像名称)[root@liunx-node1 ~]# docker ps                      #查看http://192.168.88.134:32768/   #浏览器访问[root@liunx-node1 ~]# docker logs docker_id          #查看日志

这里写图片描述

2、自定义映射端口

[root@liunx-node1 ~]# docker run -d -p 81:80 nginx   #指定端口映射(物理机端口:容器端口)http://192.168.88.134:81/      #访问备注:如果不指定ip,就是所有的ip

总结
随机映射:docker run -P 镜像名称
指定映射:
-p hostPort:containPort
-p ip:hostPort:containPort
-p ip::containPort
-p hostPort:containPort:udp

存储

1、创建数据卷

[root@linux-node1 ~]# docker run -d -it –name volume-test1 -v /data centos #后台启动
[root@linux-node1 ~]# docker inspect docker_id #查看data在物理机上的哪一个位置
[root@linux-node1 ~]# cd /var/lib/docker/volumes/d35a4fe0949ae604f675241bd45ed35e74fe3259fba43522840da18b9f47914d/_data #如果在这个目录下写入任何东西,在容器的/data目录下都会显示

这里写图片描述

2、制定目录创建数据卷(将物理机的/home/wwwroot/phpmyadmin挂载到容器的/mnt目录下),一般用于开发,并设置只读权限

[root@linux-node1 ~]# docker run -it --name volume-test2 -v /home/wwwroot/phpmyadmin:/mnt :ro centos

3、挂载文件

[root@linux-node1 ~]# docker run -it -v ~/.bash_history:/.bash_history centos    #这样docker容器就可以记录历史命令

4、数据卷容器(让一个容器访问另一个容器的卷,相当于nfs)

[root@linux-node1 ~]# docker run -d -it –name nfs -v /data centos #先启动一个容器,后台运行
[root@linux-node1 ~]# docker run -it –name test1 –volumes-from nfs centos #这个test1的容器的/data目录实际上是挂在的nfs的/data目录,如果在nfs容器的data目录下写东西,test1的data目录是可以看到的


总结
数据卷:类似于nfs
-v /data (/data是容器里面目录)
-v src:dst (指定目录,将物理机的目录,挂在到容器中的哪一个目录)

数据卷容器(让一个容器访问另一个容器的卷)
–volumes-from

原创粉丝点击