安装:
安装docke以及加速器
#安装加速器
vim /etc/docker/daemon.json
输入:
{
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
]
}
---------------------------------------------------------
systemctl daemon-reload
systemctl enable docker
#重启docker
systemctl restart docker
启动一个docker容器
1.获取镜像
2.运行镜像,生成容器
Nginx 为例:
#1.获取镜像,从你配置好的docker镜像站上拉取
#先搜索镜像文件是否存在
docker search nginx
#拉取下载镜像
docker pull nginx
#查看本地镜像有哪些
docker image ls
#删除镜像
docker rmi [镜像id号]
#镜像运行命令
docker run 参数 镜像的名字/id
#-d 后台运行容器
#-p 80:80 端口映射, 宿主级端口:容器内端口
#运行该nginx镜像,运行出,具体的容器,然后容器中,就跑这一个nginx服务了
docker run -d -p 80:80 nginx
#run后返回容器id,如:
4543671188cfc5137b9432e08d0ce42a3387e7701c6021286e37632ebebe472d
#有哪些容器在运行
docker ps
#此时可以访问80端口了
#停止容器
docker stop 容器id
#启动容器
docker start 容器id
docker生命周期
docker镜像原理1
一个完整的linux系统是由 linux内核
与发行版
组成。
#运行容器,且进入容器内
#参数解释 -i 交互式命令操作 -t 开启一个终端 bash 进入容器后执行的命令解释器
docker run -it id号 bash
#退出容器空间
exit
docker镜像原理2
#进入正在运行的容器内
docker exec -it id号 bash
Base Image 层 提供/etc、/opt等基础文件系统,上层的软件都会共用这一个base image
如:
这两个centos并不是占用400多M,而是他们相同的层会进行一个复用
如果在运行nginx时要修改、创建配置文件,并不是直接修改base image的
只会写入顶层的writable容器层(可写层),其余的下层为只读层
docker镜像的实际使用步骤:
获取镜像
1.从dockerhub获取镜像
2.从本地导出、导入
3.私有的docker仓库
#获取镜像,镜像像托管仓库一样,好比yum源一样
#默认的docker仓库是 dockerhub,有大量的优质镜像
#搜索镜像
docker search 镜像名:tag
#下载镜像
docker pull 镜像名
#查看docker镜像路径
docker info | grep Root
#使用不同的镜像,生成容器
# -it 开启一个交互式的终端 --rm 容器退出时删除该容器
docker run -it --rm centos bash
查看镜像
#查看本地镜像
docker images
#查看具体的镜像
docker images 镜像名
删除镜像
#根据镜像的id,名字,摘要
#删除的镜像不得有依赖的容器记录
docker rmi id号(前三位即可)
#ps 查看正在运行的容器,-a 查看历史容器记录
docker ps -a
#删除容器记录
docker rm id号
镜像管理
#批量删除所有镜像,谨慎操作
docker rmi `docker images -aq`
#批量删除所有容器记录,谨慎操作
docker rm `docker ps -aq`
#导出镜像
#比如默认运行的centos镜像,不提供vim功能,运行该容器后,在容器内安装vim
#然后提交改容器,再导出该镜像为压缩文件,可以发给其他人用
#导出镜像的命令
docker image save centos:7.8.2003 > /opt/centos:7.8.2003
#导入镜像的命令
docker image load -i /opt/centos:7.8.2003
#查看镜像的详细信息
docker image inspect 镜像id
docker容器管理
docker rum
等于 创建+启动
注意:
1.容器内的进程必须处于前台运行状态,否则容器就会直接退出。
2.如果容器内,什么事也没做,容器也会挂掉,容器内,必须有一个进程在前台运行。
#什么是前台运行?
比如在命令行 ping www.baidu.com
#什么是后台运行?
比如在命令行 ping www.baidu.com &
#运行容器的玩法,以基础centos镜像为例
#1.运行一个挂掉的容器
docker run centos
这个写法,会产生独立的容器记录,且容器没有内没有程序在跑,因此挂了,正确写法看2.
#2.运行容器,且进入容器内,且在容器内执行某个命令
docker rum -it centos bash
#3.开启一个容器,让他帮你运行某个程序,属于前台运行,会占用一个宿主机的终端
docker rum centos ping www.baidu.com
#4.运行一个活着的容器,docker ps可以看到容器
#-d 参数,让容器在后台跑着(针对宿主机而言),这样宿主机的终端可以继续进行操作
docker rum -d centos ping www.baidu.com
#5.丰富docker运行的参数
#--rm 跑完后删除这个容器记录 --name给容器起个名字
docker rum -d --rm --name 名字 centos ping www.baidu.com
#6.查看容器日志
#刷新日志
docker logs -f id号
#7.进入正在运行的容器空间内
#运行历史容器
docker start 容器id
#exec用于进入容器空间内
docker exec -it 容器id bash
#停止容器运行
docker stop 容器id
#8.查看容器的详细信息,用于高级的调试
docker container inspect 容器id号
#9.容器的端口映射,(以nginx为例)
#后台运行nginx容器,且起个名字,且端口映射主机的85端口,访问到容器内的80端口
docker run -d --name 名字 -p 85:80 nginx
#9.1查看docker端口转发情况
docker port 容器id
#9.2随机端口映射 -P,大写的P
docker run -d --name 名字 -P nginx
#10.容器的提交
#运行基础的centos,在容器内安装vim ,然后提交新的镜像
#新的镜像,在运行出的容器,默认就携带vim了
docker commit 容器id 新的镜像名
dockerfile实践
用于构建docker镜像
相当于一个脚本,通过dockerfile自己的指令,构建
软件依赖,存储等
利用dockerfile自定义,想要的会用的 ,基础发行版,如果是直接pull下来的可能是deban,不会用啊!
需求:
构建nginx镜像,且运行容器后生成的页面,页面内容为“Hallo”。
#1.创建Dockerfile:
FROM nginx
RUN echo '<meta charset=utf8>hallo docker!!' > /usr/share/nginx/html/index.html
#2.构建Dockerfile
#在Dockerfile目录
docker build .
#3.设置构建的镜像名
docker tag 镜像id my_nginx(自定义镜像名)
#4.运行镜像
docker run -d -p 80:80 my_nginx
dockerfile指令
VOLUME指令原理:
指令语法:
经典问题:
ENTRYPOINT和CMD的区别和用法
ARG和ENV指令
设置环境变量
VOLUME指令
容器在运行时,应该保证在存储层不写入任何数据,运行在容器内产生的数据,我们推荐挂载,写入到宿主机上,进行维护
#将容器内的/data文件夹,在容器运行时,该目录自动挂载为匿名卷,任何向该目录中写入数据的操作,都不会杯容器记录,保证容器存储的无状态理念
VOLUME /data
#Dockerfile:
FROM centos
MAINTAINER KXHH
VOLUME ["/data1","/data2"]
#该容器运行时,这两个目录自动和宿主主机的目录做好映射关系
docker build .
#运行镜像
docker run 镜像id
#查看生成的容器信息
docker ps -a |head -2
#查看容器的详细信息,变量、存储等等很详细
docker inspect 容器id
容器数据挂载方式:
1.通过 dockerfile,指定VOLUME 目录
2.通过 docker run -v 参数 ,直接设置需要的映射挂载的目录
EXPOSE参数
指定容器运行时对外提供的端口服务
帮助使用该镜像的人,快速理解该容器的一个端口业务
docker port 容器
docker run -p 宿主机端口:容器端口
docker run -P 大写的p,宿主随机端口:容器端口
WORKDIR指令
用于在dockerfile 中,目录的切换,更改工作目录
WORKDIR /opt
USER指令
用于改变环境,用于切换用户
USER root
USER tom