Docker入门和实战
一、 docker概述
1、docker是go语言开发的;
2、docker的思想就如同它的logo一样,docker就是大鲸鱼,而每个镜像container就是对应的集装箱。Docker的核心思想就是隔离。通过隔离机制,既可以保障每个集装箱的东西是互不影响的,也可以将服务器的资源压榨到最大程度。
3、docker的官方文档
https://docs.docker.com/get-started/
docker hub:
https://hub.docker.com/
4、docker的出现改变了什么?
最主要的是镜像
5、docker与VM的区别
Docker没有了VM OS,VM OS 去哪里了?没有操作系统怎么运行,它借用的是主机的操作系统。Docker有了小巧的能力。
① VM虚拟机出完整的操作系统,而docker直接运行在宿主机的内存上,没有自己的内核和虚拟硬件,所以更加小巧。
② VM是操作系统级别的虚拟化,docker是内核级别的虚拟化
③ VM比docker更重,更消耗资源,启动速度远慢于docker
④ Docker可实现快速的运维部署
⑤ Docker 更便捷的升级、扩容和缩容
⑥ Docker 可以高效的利用物理机的硬件资源
二、Docker安装
1、 卸载已经安装的docker
$sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装DockerEngines
Set up the repository:
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
3、 开启docker
sudo –systemctl start docker
4、验证docker是否安装成功
sudo docker run hello-word
三、docker 命令
1、docker启动相关指令
1) docker images 查看所有的镜像
2) 配置国内的镜像,加快下载速度。
sudo mkdir -p /etc/docker
sudo tee
/etc/docker/daemon.json <<-'EOF'
{"registry-mirrors":
["https://aa25jngun.mirror.aliyuncs.com"]
}EOF
sudo systemctl daemon-reload(重新加载docker)
sudo systemctl restart docker(重启docker)
3)看一下ctl
cd etc/docker
cat daemon.json
2、docker 基础命令
1)查看docker 的版本docker version
2)查看docker的信息
3)docker 帮助命令 docker +命令+--help
docker images –help
docker images –aq 只显示image ids 如果批量删除镜像可以用到这个命令。
4)查看运行中的容器
docker ps
5)查看容器的top信息
docker top + 容器id 容器id可以通过docker ps 查询运行中的container id
6)查询元数据信息
docker inspect + 容器id
7) 进入容器
有两种方法进入容器,但是他们的进入方式是不一样的。
docker run –it centos bin/bash 已经进入镜像的container的镜像里了。按住 ctrl+qp退出
第一种方式:attach (最常用)
docker attach +容器id
第二种方式:exec
docker exec -it e22af675bae3 /bin/bash
attach进入后,退出,再次进入能保持我之前的状态。而exec不能保持之前的状态。
8)文件copy
① 从宿主机copy到容器docker cp SRC_PATH [容器id]:DEST_PATH
② 从容器copy到宿主机 docker cp[容器id] SRC_PATH DEST_PATH
创建一个文件 touch a.text
利用命令将a.text copy到容器
docker cp cd home/muse/a.text e22af675bae3:home
查看一下有没有copy 成功。docker attatch e22af675bae3进入容器 ls 看到已经有了文件
在容器里建立b.text 跳出容器
docker cp e22af675bae3:home cd home/muse/b.text
9)查看容器状态
docker stats
启动ES
docker run –d –name es –p 9200:9200 –p 9300:9300
具体看docker hub
-d表示后台执行 –name 是指定名称 第一个–p是内部端口,第二个–p是外部端口。
查看docker的运行状态
3、镜像命令
1)列出本机所有的镜像
docker images
2)搜索镜像(可以在docker hub上搜索)
docker search rabbitMQ
docker search rabbitMq –f=stars=20
star>20的
3)下载最新镜像
docker pull rabbitMQ
4) 下载最新镜像
docker pull rabbitMQ3.8.11
5)删除镜像
docker rmi –f [image id]
docker rmi –f [image id] [image id] [image id] [image id]
docker rmi –f $(docker images aq)
加上-f表示强制删除
4、容器命令
1)运行容器
docker run –it centos bin bash
以交互的方式进入
docker run -d --name nginx3 -p 1113:80 nginx
docker ps –a 显示所有容器,不加 -a 默认是运行中的容器。
2)退出容器
CTRL+P+Q 退出容器,但并不关闭容器
exit CTRL+D 退出容器,关闭容器
3) 删除容器
① 删除1个容器
docker rm –f 容器id 强制删除一个up状态的容器
docker rm 容器id 删除一个非up的容器
② 删除多个状态的容器
docker rm 容器id 容器id
docker rm –f $(docker ps aq) 删除所有的容器
4)停止、启动和重启容器
①启动 docker start 容器id
②重启 docker restart 容器id
③停止 docker stop 容器id
5、 Kill掉容器
docker kill 容器id
四、 docker镜像原理
1、什么是镜像
镜像是一种轻量级、可执行的软件包,包含代码、运行时、环境变量和配置文件。所有应用直接打包docker镜像就可以直接跑起来。
获取镜像的方式:
① 从远程下载
②通过传输copy方式获得
③自己通过dockerfile获得
2、镜像的拉取
我们下载的时候看着一层层下载,这就是联合文件系统—unionFS。
比如下载mysql,之前下载过其它版本的mysql,某些layer已经下载就可以复用,不用再次下载。
联合文件系统是一种分层、轻量级、高性能的文件系统。它支持对文件系统的修改作为一次提交来一层层的叠加。
联合文件系统是docker的基础。
3、提交镜像
提交容器成为一个新的副本。
五、 容器数据卷
1、什么是容器数据卷
Docker 是将应用和环境进行了打包,那么如果删掉容器的话,数据也同步被删除,如果我们有数据持久化的需求,或者数据之间共享的需求,那么就用到了容器数据卷。
2、执行挂载:(把本机路径home/muse/text,挂在centes容器的bin/bash目录下)
具体命令:docker run it –v home/muse/text: /home centos /bin/bash
#查看挂载内容:
docker inspect 容器id
3、具名挂载和匿名挂载
1)匿名挂载
通过 –v指定容器内路径
docker run –d –p --name nginx1 –v:/etc/nginx nginx
2)具名挂载
通过 –v 卷名:容器内路径,指定具名挂载
docker run –d –p --name nginx1 –v nginx2:/etc/nginx nginx
4、挂载常用的相关命令
1)查看挂载列表
docker volume ls
2)查看挂载信息
docker volume inspect [volume]
5、数据卷容器
我们发现,删除了museCentOS03之后,museCentOS01的目录下任然有a.txt文件,这表明了museCentOS01- museCentOS03这三个容器的文件a.txt是相互同步复制备份的。并不是共享的某个目录。
6、编写一个简单的dockerFile
1)在home/muse下构造dockerFiles文件和dockerFile01文件
2)编写dockerFile(命令大写)
FROM centos
Volume[“muse01”,”muse02”]
cmd echo “…finish…..”
cmd /bin/bash
3)构造镜像
docker bulid –f /home/muse/dockerfiles/dockerfile01 -t muse/centos:1.0 .
4)启动镜像
docker run -it eb78333356a6 /bin/bash