Docker入门
一、Docker为什么会出现
此外,Docker是基于Go开发的。
二、虚拟化技术和容器化技术的对比
(1) 虚拟化技术的缺点
·资源占用十分多
·冗余步骤多
·启动很慢
(2) 容器化技术
(3)比较Docker和虚拟化技术的不同
① 传统虚拟机, 虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
② 容器内的应用直接运行在宿主机的内部,容器是没有自己的内核的,也没有虚拟硬件,所以轻便;
③ 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响;
(4)应用更快速的交互和部署
① 传统:一堆帮助文档,安装程序;
② Docker: 打包镜像发布测试,一键运行;
更便捷的升级和扩缩容;
更简的系统运维;
更高效的计算资源利用;
三、名词解释
(1)镜像(image)
Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像 ===> run ===> tomcat01容器, 通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的);
(2)容器(container)
① Docker利用容器技术,独立运行一个或者一组应用, 通过镜像来创建的;
② 启动,停止,删除,基本命令!
③ 就目前可以把这个容器理解为一个建议的linux系统;
(3)仓库(repository)
① 存放镜像的地方;
② Docker Hub(默认是国外的);
③ 阿里云,都有容器服务(配置镜像加速!);
安装Docker
1.卸载原有的Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.安装环境并配置阿里云镜像
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.更新 yum 软件包索引
sudo yum makecache fast
4.安装docker相关的
sudo yum install docker-ce docker-ce-cli containerd.io
5.启动Docker
sudo systemctl start docker
6.查看Docker信息
sudo docker version
7.测试docker
sudo docker run hello-world
卸载docker
1.卸载docker依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
2.删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
/var/lib/docker #默认工作路径
docker run hello-world 流程
底层原理
(1)Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!
Docker-Server接收到Docker-Client的指令,就会执行这个命令!
(2)Docker为什么比VM快?
① Docker有着比虚拟机更少的抽象层
由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。
② Docker利用的是宿主机的内核,VM需要Guest OS
所以说,新建一个容器的时候,Docker不需要要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载GuestOS,分钟级别的,而Docker是利用宿主机的操作系统的。省略了这个复杂的过程,是秒级的。
常用命令
命令文档网址:
https://docs.docker.com/reference/
帮助命令
# docker version
显示docker的版本信息
# docker info
显示docker的系统信息(包括镜像和容器数量)
# docker 命令 —help
镜像命令
docker images 查看本地主机上的镜像
[root@VM-20-14-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rabbitmq management 7b806da5f051 5 days ago 256MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
Options:
-a, --all #列出所有镜像
-q, --quiet #只显示镜像的id
docker search 查询镜像
[root@VM-20-14-centos ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12253 [OK]
mariadb MariaDB Server is a high performing open sou… 4710 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 908 [OK]
percona Percona Server is a fork of the MySQL relati… 572 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 470 [OK]
mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 93
centos/mysql-57-centos7 MySQL 5.7 SQL database server 92
bitnami/mysql Bitnami MySQL Docker Image 65 [OK]
docker pull 下载
#docker pull mysql
默认下载最新的
Using default tag:latest
docker rmi -f 删除
[root@VM-20-14-centos ~]# docker rmi -f 容器id 容器id 删除多个
[root@VM-20-14-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rabbitmq management 7b806da5f051 5 days ago 256MB
hello-world latest feb5d9fea6a5 5 months ago 13.3kB
[root@VM-20-14-centos ~]# docker rmi -f feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
删除所有
[root@VM-20-14-centos ~]# docker rmi -f $(docker images -aq)
容器命令
#docker run [参数] image
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02 来区分容器
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
[root@VM-20-14-centos ~]# docker run -it centos /bin/bash
[root@d83abec677f2 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
#从容器停止并退出
[root@775ed1754d34 /]# exit
exit
#从容器退出不停止
按键 CTRL+P+Q
[root@aa9402cbc235 /]# [root@VM-20-14-centos /]#
#查看当前正在运行的容器
[root@VM-20-14-centos /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#查看正在运行的容器以及历史运行
[root@VM-20-14-centos /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
775ed1754d34 centos "/bin/bash" 36 seconds ago Exited (0) 22 seconds ago zen_ptolemy
[root@VM-20-14-centos /]#
进入容器
docker exec -it 容器名字或id bash
删除容器
docker rm 容器id 删除指定,不能删除正在运行的
docker rm -f(docker ps -aq) 删除全部
docker rm -a -q|xargs docker rm 删除全部
启动和停止
docker start 容器id
docker stop 容器id
docker restart 容器id
docker kill 容器id
安装Nginx
[root@VM-20-14-centos ~]# docker run -d --name nginx01 -p 3344:80 nginx
4a8c2c0f7ea90df77e565961cc1b3ac24b55419e014b24726a18fba94b0bc0b9
[root@VM-20-14-centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88589edcdf50 nginx "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:3344->80/tcp, :::3344->80/tcp nginx01
[root@VM-20-14-centos ~]# curl localhost:3344 #测试
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
and support please refer to
nginx.org.
Commercial support is available at
nginx.com.
Thank you for using nginx.
```[外链图片转存中…(img-Pg4Fykzm-1647518655245)]