Docker容器技术基础篇

简介

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 save -o /opt/centos.tag.gz  (自定义名称) centos(镜像名称或者id) 

#导入镜像
[root@liunx-node1 ~]# docker load < /opt/centos.tag.gz   
[root@liunx-node1 ~]# cat /opt/centos.tag.gz   | docker import - 导入后的名称[:标签]

3、查看、重命名docker镜像

[root@liunx-node1 ~]# docker images     #每一个镜像都有一个唯一的image id
[root@liunx-node1 ~]# docker tag 镜像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'   (后面这个是命令) 

8、修过docker的镜像源

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://b3wj9pou.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

==================
使用阿里云镜像加速器:"registry-mirrors": ["https://XXXXXX.mirror.aliyuncs.com"]
添加清华镜像源: "registry-mirrors": ["https://mirrors.tuna.tsinghua.edu.cn/"]

总结:
搜索镜像: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,容器也在与运行

#还有一个方法是使用attach进入容器后
使用 Ctrl+P+Q 退出

这里写图片描述
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进程

6、docker启动tomcat项目

#下载tomcat镜像
docker pull tomcat

#创建容器
docker run --name jenpro -p 8081:8080 -t -i tomcat

#访问
http://192.168.16.191:8081

#停止正在运行的容器,将war包拷贝到容器里面
docker cp jenkins.war 74ed665e0c80:/usr/local/tomcat/webapps

#启动容器
docker start 74ed665e0c80

#访问
http://192.168.16.191:8081/jenkins/

#查找容器在硬盘的位置(主要是merged目录)
docker inspect 74ed665e0c80

这里写图片描述

这里写图片描述

这里写图片描述

总结
启动容器: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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值