持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
引文
学了很久的WEB发现自己还没有学过DOCKER,于是就着我学习DOCKER基础知识的路线来写一篇DOCKER入门文章,希望能帮助到大家。
介绍
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
文档地址:docs.docker.com/
仓库地址:hub.docker.com/
镜像
镜像的英文名叫image,是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。可以把许多文件做成一个镜像文件,与GHOST等程序放在一个盘里用GHOST等软件打开后,又恢复成许多文件,RAID 1和RAID 10使用的就是镜像。常见的镜像文件格式有ISO、BIN、IMG、TAO、DAO、CIF、FCD。
Docker容器 VS VM
Docker容器:使用Docker引擎进行调度和隔离,提高了资源利用率,在相同硬件能力下可以运行更多的容器实例;每个容器拥有自己的隔离化用户空间。
VM:每个VM都要有自己的操作系统、应用程序和必要的依赖文件等。
仓库
仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。
执行流程
DOCKER安装
docker安装是非常简单的,这里就简单贴一下它的安装文档吧:
Docker要求CentOS系统的内核版本高于3.10
基本命令
docker pull : 拉取镜像(从远程仓库中获取放到Images)
docker run : 运行镜像(运行镜像后就会放到容器里)
docker container : 查看运行了那些镜像(容器)
docker image : 查看有那些镜像
docker network : 查看网络
docker valume : 查看数据表等
docker rmi -f ID:删除指定镜像
换镜像源
有的小伙伴可能会有这样的问题:为什么我下载镜像的速度这么慢?关于下载慢的原因不光是因为个人网速的原因,更多的是因为没有进行换源导致的(突然想到学校老师说过下载镜像半夜的时候网速比较快,生草),我们将docker换成国内源:
Docker中国区官方镜像:
https://registry.docker-cn.com
网易:
http://hub-mirror.c.163.com
ustc:
https://docker.mirrors.ustc.edu.cn
中国科技大学:
https://docker.mirrors.ustc.edu.cn
阿里云:
https://cr.console.aliyun.com/
腾讯云:
https://mirror.ccs.tencentyun.com
创建或修改 /etc/docker/daemon.json 文件,修改成如下形式:
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
]
}
不要忘记重启一下docker服务:
systemctl daemon-reload
systemctl restart docker.service
docker info #查看是否成功修改
容器命令
有镜像才可以创建容器,比如我们先下载一个centos镜像:
docker pull centos
启动容器
下载完后便可以启动容器
docker run [可选参数] image
#可选参数说明
--name='Name' 用来区分容器
-it 使用交互方式运行,需指定交互 shell
#
-d 后台方式运行
-p 指定端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口*
-p 容器端口 指定容器端口,主机端口随机
-P 随即指定主机和容器端口
退出容器
我们在容器内如何退出呢:
exit 停止并退出
ctrl+p+q 退出不停止
其他容器命令
停止启动容器
docker start 容器ID #启动
docker restart 容器ID #重启
docker stop 容器ID #停止当前正在运行的容器
docker kill 容器ID #强制停止
列出所有容器
docker ps #列出当前运行容器
-a #列出所有容器 正在运行+历史运行
-n=3 #只显示最近创建的3个容器
删除容器
docker rm 容器ID
#删除指定容器,不能删除正在运行容器 加-f强制删除
docker rm -f ID1 ID2
#删除多个容器
docker rm -f $(docker ps -aq)
docker ps -a -q|xargs docker rm
#删除全部容器
进入正在运行的容器
docker exec it 容器id bashshell
docker attach 容器id
后台运行容器
docker run -d centos
文件内外传输
docker cp containerID:/path /path
从容器 拷贝到外界
commit镜像
docker commit -m='提交描述信息' -a='作者' containerID 目标镜像名:[tag]
生成一个新的镜像,可以用命令docker images查看。
数据卷
先带大家了解一下什么是数据卷,当一个容器长时间运行,会产生一些文件,例如日志文件等等,为了防止当我们删除容器时这些文件会随着容器而删除,我们采用数据卷,简单来说就是建立一个容器与宿主机的映射目录。我画图简单给大家解释一下:
管理卷
docker volume create edc-nginx-vol // 创建一个自定义容器卷
docker volume ls #查看所有容器卷
docker volume inspect 卷名 #查看指定容器卷详情信息
数据卷挂载
docker run -it -v 主机目录:docker目录
#docker inspect 容器id 查看挂在情况
# "Mounts": [
{
"Type": "bind",
"Source": "/root/XINO", #主机内地址
"Destination": "/home", #docker地址
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
]
举例:mysql同步数据
docker run -d -p 8888:3306 -v /root/test/conf:/etc/mysql/conf.d -v /root/test/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
具名挂载和匿名挂载
根据挂载类型可以分为以下情况:
-v 容器内路径 #匿名挂载
-v 卷名 : 容器内路径 #具名挂载
-v 宿主机路径 : 容器内路径 #指定路径挂载
匿名挂载
-v时只写了容器内的路径没有写容器外的路径,这种就是匿名挂载.
docker run -d -v /etc --name centos
具名挂载
docker run -d -v XINO-centos:/etc --name XINO-centos centos
dockerfile
Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
构建步骤
1.编写 dockerfile 文件
2.docker build 构建成为一个镜像
3.docker run 运行镜像
基本命令
实例
FROM centos
MAINTAINER XINO<1289288682@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#默认工作目录是 根目录
RUN yum -y install vim
EXPOSE 80
CMD echo $MYPATH
CMD /bin/bash
构建命令
docker build -f ./dockerfile -t centos:dockerfile .
Docker网络
当我们启动一个容器时,docker会给容器分配一个Ip,采用了上图的 docker0 桥接模式,使用的技术是 evth-pair 技术,只要容器删除,对应网桥就没了,十分的便利。
自定义
我们在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:
- host模式:使用 --net=host 指定。
- none模式:使用 --net=none 指定。
- bridge模式:使用 --net=bridge 指定,默认设置。
- container模式:使用 --net=container:NAME_or_ID 指定。
自定义命令如下:
docker network create
结尾
整体来说DOCKER的命令及运用对于新手来说还是挺好理解的,本文就个人学习的docker内容整理了一下,希望对大家有帮助,可能会有不对的地方望大家指正。