Docker
Docker基于Go语言开发。
官网:https://www.docker.com/
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/
Docker与传统虚拟机的区别
- 虚拟机是虚拟一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主的内容,容器是没有自己的内核,也没有虚拟我们的硬件。所以就变轻了。
- 每个容器之间都是相互隔离,每个容器都有一个属于自己的文件系统互不影响
- Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何Linux机器上。可以实现虚拟化,
- 容器是完全使用沙箱机制,相互之间不会有任何接口。更重要的是容器开销低。
Docker 的优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
安装Docker
-
卸载旧版本
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
安装需要的安装包
yum install -y yum-utils
-
设置镜像的仓库
yum-config-manager \ --add-repo \ # 默认是国外的 https://download.docker.com/linux/centos/docker-ce.repo # 阿里云 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
安装docker相关的内容
# 更新软件包的索引 yum makecache fast # 安装相关依赖 yum install docker-ce docker-ce-cli containerd.io
-
启动
docker
systemctl start docker # 查看版本 docker version
-
测试docker
docker run hello-word
-
卸载docker
yum remove docker-ce docker-ce-cli containerd.io
-
删除docker目录
rm -rf /var/lib/docker rm -rf /var/lib/containerd
-
阿里云镜像
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors":["https://qiyb9988.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
底层原理
docker是怎么工作的?
Docker是一个Client-Server 结构的系统,Docker的守护进程在主机上,通过Socket客户端访问。
Docker-Server接收到Docker-Client的指令。就会执行这个命令!
镜像命令
docker images 查看所有本地主机上的镜像
搜索命令
docker search --help
# 搜索3000以上的
docker search mysql --filter=STARS=3000
下载镜像
docker pull --help
[root@localhost ~]# docker pull mysql[:tag]
Using default tag: latest # 如果不写tag. 默认就是latest,最新版!
latest: Pulling from library/mysql
69692152171a: Pull complete # 分层下载,docker images的核心联合文件系统
1651b0be3df3: Pull complete
951da7386bc8: Pull complete
0f86c95aa242: Pull complete
37ba2d8bd4fe: Pull complete
6d278bb05e94: Pull complete
497efbd93a3e: Pull complete
f7fddf10c2c2: Pull complete
16415d159dfb: Pull complete
0e530ffc6b73: Pull complete
b0a4a1a77178: Pull complete
cd90f92aa9ef: Pull complete
Digest: sha256:d50098d7fcb25b1fcb24e2d3247cae3fc55815d64fec640dc395840f8fa80969# 签名防伪信息
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
# 指定版本下载
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
69692152171a: Already exists
1651b0be3df3: Already exists
951da7386bc8: Already exists
0f86c95aa242: Already exists
37ba2d8bd4fe: Already exists
6d278bb05e94: Already exists
497efbd93a3e: Already exists
a023ae82eef5: Pull complete
e76c35f20ee7: Pull complete
e887524d2ef9: Pull complete
ccb65627e1c3: Pull complete
Digest: sha256:a682e3c78fc5bd941e9db080b4796c75f69a28a8cad65677c23f7a9f18ba21fa
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
删除镜像
# 删除所有镜像
docker rmi -f $(docker images -aq)
# 删除执行的容器
docker rmi -f 容器ID
# 删除多个容器
docker rmi -f 容器ID 容器ID 容器ID
容器命令
说明:我们有了镜像才可以创建容器,Linux,下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] images
# 参数说明
--name="Name" 容器名字
-d 后台运行方式
-i -t 使用交互方式运行,进入容器查看内容/
-p 指定容器的端口 -p 8080:8080
-p 主机端口映射到容器端口(常用)
-p 容器端口
# 启动并进入容器
docker run -it centos /bin/bash
列出所以运行的容器
docker ps -a
退出容器
exit # 退出并不停止
Ctrl + P + Q # 容器不停止退出
删除容器
docker rm 容器ID # 删除指定的容器
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有容器
启动和停止容器的操作
docker start 容器ID # 启动容器
docker restart 容器ID # 重启容器
docker stop 容器ID # 停止当前容器
docker kill 容器ID # 杀掉容器
常用的其他命令
后台启动容器
# 命令 docker run -d 镜像名
docker run -d centos
# 问题docker ps 发现 centos 停止了
# 常见的坑:docker 容器使用后台运行,就必须要有一个后台进程,docker 发现没有应用,就会自动停止
查看镜像的元数据
docker inspect 498d3953de8c
进入当前正在运行的容器
# 方式一 进入容器后开启新终端(常用)
docker exec -it 容器ID
# 方式二 进入容器正在执行的终端(不会启动新的进程)
docker attach 容器ID
从容器内拷贝文件到主机上
# 查看当前镜像
docker images
# 开启centos镜像
docker run -it centos /bin/bashs
# 在home文件下创建文件
cd /home
touch text.java
# 退出当前镜像
exit
# 查看历史版本(虽然容器没有在运行,但丝毫不影响复制文件)
docker ps -a
# 进行复制
docker cp 容器ID:/home/text.java /home
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IFsJNxoT-1622790554694)(C:/Users/Andy/AppData/Roaming/Typora/typora-user-images/image-20210604092930272.png)]
Docker安装
nginx
# 搜索镜像
docker search nginx
# 下载
docker pull nginx
# 运行
docker run -d --name nginx01 -p:9527:80 nginx
# 本机测试
curl localhost:9527
tomcat
# 下载tomcat
docker pull tomcat
# 后台运行tomcat
docker run -d --name tomcat01 -p 9528:8080 tomcat
# 虽然能运行但是404 进入容器一探究竟
docker exec -it tomcat01 /bin/bash
# 查看目录
ls al
# 进入 webapps
cd webapps
# 查看内容是否有项目
ls
# 发现问题,命令少了,webapps没有项目(因为阿里云的原因,默认是最小的镜像,把不必要的都提除掉。)
#解决问题:把webapp.dist/*的文件复制到webapps中即可
cd -r wabapps.dist/* webapps
可视化
-
portainer
docker run -d -p 8088:9000 \ > --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer # 访问外网8088
Docker镜像讲解
镜像是什么
镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件需要的所有内容,包括代码,运行时、库、环境变量和配置文件
所有的应用,直接打包docker镜像,就可以直接跑起来。
如何得到镜像
- 从远程仓库下载。
- 朋友拷贝给你
- 自己制作镜像DockerFile
commit镜像
# docker commit 提交容器成为新版本
#命令和git一致
docker commit -m "提交的描述信息" -a="作者" 容器ID 目标镜像名,[TAG]
实战测试
#启动tomcat
docker run -d -p 8888:8080 tomcat
#进入tomcat
docker exec -it ID /bin/bash
# 将webapps.dist包下复制到webapps文件下
cp -r webapps.dist/* webapps/
# 将修改好的镜像提交到本地。
docker commit -m="提交信息" -a="作者" 容器ID 目标镜像名 【TAG】
#启动commit的镜像
docker run -d -p 宿主端口:8080 目标镜像名:[TAG]