如果对于容器和镜像还无法区分:https://blog.csdn.net/yao694899744/article/details/105307150?spm=1001.2014.3001.5502
Docker底层原理
Docker是怎么工作的?
Docker 是一个 Client - Server(C/S) 结构的系统。Dokcer的守护进程运行在主机上。通过Socket从客户端访问!
DockerServer 接受到 Docker-Client 的指令,就会执行这个命令!
Dokcer 为什么比 VM 快?
1、Dokcer 有着比虚拟机更少的抽象层
2、Dokcer 利用的是宿主机的内核, VM 需要 Guest OS。
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的,而docker 是利用宿主机的操作系统,省略了这个复杂的过程,秒级!
Docker常用命令
帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
帮助文档的地址:https://docs.docker.com/engine/reference/commandline/
镜像命令
C:\Users\lookchem>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
casimg dev 75fda16afbb3 6 weeks ago 186MB
mcr.microsoft.com/dotnet/runtime 5.0 da195286baf8 4 months ago 186MB
mcr.microsoft.com/dotnet/aspnet 5.0 99323686c908 5 months ago 205MB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a, --all Show all images (default hides intermediate images)#列出所有镜像
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs(只显示镜像的id)
docker search 搜索镜像
C:\Users\lookchem>docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13234 [OK]
mariadb MariaDB Server is a high performing open sou… 5062 [OK]
#可选项 通过搜索来过滤
--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
C:\Users\lookchem>docker search mysql --filter=stars=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13234 [OK]
mariadb MariaDB Server is a high performing open sou… 5062 [OK]
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
docker pull 下载镜像
# 下载镜像 docker pull 镜像名[:tag]
C:\Users\lookchem>docker pull mysql
Using default tag: latest #如果不写 tag,默认就是 latest
latest: Pulling from library/mysql
295ca2342728: Pull complete #分层下载,docker images的核心 联合文件系统
79af4312a7e0: Pull complete
48d3d73d1704: Pull complete
521b8724b397: Pull complete
b8cf360b4a14: Pull complete
0115482cc006: Pull complete
a360b08917ea: Pull complete
12deeb3c1323: Pull complete
ee1dc10db1e9: Pull complete
64be404ad29c: Pull complete
1921fe8879a2: Pull complete
Digest: sha256:3c1aab708f6e57fc4dccafe36baccc7219acfb4ec450f3fb6d370ea89409e906 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest#真实地址
# 等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest
# 指定版本下载
C:\Users\lookchem>docker pull mysql:5.7
docker rmi 删除镜像
# docker rmi -f 镜像id #删除指定镜像id
# docker rmi -f 镜像id 镜像id 镜像id 镜像id #删除多个镜像id
# docker rmi -f $(docker images -aq) #删除全部镜像
C:\Users\lookchem>docker rmi -f dbaea59d1b41 # 删除指定镜像id
Untagged: mysql:latest
Untagged: mysql@sha256:3c1aab708f6e57fc4dccafe36baccc7219acfb4ec450f3fb6d370ea89409e906
Deleted: sha256:dbaea59d1b4194257138a6434ec0820a13097dd7e900135e78daf9759fe2407a
Deleted: sha256:e507fd966e8388339d4024e698d2d9000eece41c497a8857774c9f0f1f17c3de
Deleted: sha256:239ac15e65c3efa92872682fdfcbf177735fba69a3bb236f7acfb230319f8b9f
Deleted: sha256:944a10fce07786f698ca86bb6781f004e9f1fa22fad021ec57132d77e231a165
Deleted: sha256:6acb95708216880feed67b390e3855ec9c48947904a1f97900584c9bedafca14
Deleted: sha256:28945f2a92f5ff073346724641d6e82464dd61dc903ab71f18eb975503a1a5d1
Deleted: sha256:a1e4e03c3de2361aedf9cea34b0477dc80a7de3dce128ac450a1aa8b4202ea7f
Deleted: sha256:8f063e9b29c9e6fca010e488a7972826483aa87364fee8005d30ac5809d539df
Deleted: sha256:714888f3d7e50ce4819618162cf60f0d6899e556b4cfc83edce10750117bcbaf
Deleted: sha256:3b0f259c919a98067a2debaa2bc9c405250fc9c468ceabc9a0ebe51eb36d2e7e
Deleted: sha256:2047a833bd7438a2271051138d5d599d01374b615a7f77f6ef2b199ff917f6cb
Deleted: sha256:553b196ea5e8358e8b819253dc8fb9af6cf5711df6c83e594b4c2109c61eda18
容器命令
说明:我们有了镜像才可以创建容器。linux下载一个centos镜像来测试学习
docker pull centos
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名称 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:容器端口:主机端口
-p 容器端口:主机端口(常用)
-p 容器端口
-p 随机指定端口
#测试,启动并进入容器
C:\Users\lookchem>docker run -it centos
[root@e543898b573a /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的!
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
列出所有运行的容器
#docker ps 命令
# 列出正在运行的容器
-a # 列出正在运行的容器+未运行的容器
-n=? # 显示最近创建的容器 ?=显示几个
-q # 只显示容器的编号
C:\Users\lookchem>docker ps #列出正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e543898b573a centos "/bin/bash" 12 minutes ago Up 7 seconds awesome_elbakyan
f1752205028a ccr.ccs.tencentyun.com/mssql/sqlserver:2019-CU6-ubuntu-16.04 "/opt/mssql/bin/perm…" 19 months ago Up 6 hours 0.0.0.0:1433->1433/tcp mssql
C:\Users\lookchem>docker ps -a #列出所有容器,包括未运行的
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e543898b573a centos "/bin/bash" 7 minutes ago Exited (0) 18 seconds ago awesome_elbakyan
f83772c4d175 redis "docker-entrypoint.s…" 9 months ago Exited (255) 6 weeks ago 0.0.0.0:6379->6379/tcp redis
5c2c179e2ca8 mongo:latest "docker-entrypoint.s…" 15 months ago Exited (255) 7 weeks ago 0.0.0.0:27017->27017/tcp log-mongo
f1752205028a ccr.ccs.tencentyun.com/mssql/sqlserver:2019-CU6-ubuntu-16.04 "/opt/mssql/bin/perm…" 19 months ago Up 6 hours 0.0.0.0:1433->1433/tcp mssql
退出容器
exit #停止并退出容器
ctrl + p + Q #容器不停止 退出
启动和停止容器
docker start 容器ID #启动指定现有容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器 优雅退出
docker kill 容器id #停止容器 应用程序直接退出(强制)
删除容器
docker rm 容器id #删除指定现有容器,不能删除正在运行的容器。如果强制删除 rm -f 全称是force:强制
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q|xargs docker rm #删除所有容器
rm删除容器 rmi删除镜像
常用其他命令
后台启动容器
# 命令 docker run -d 容器名称
C:\Users\lookchem>docker run -d centos
# 问题docker ps 发现 centos停止了
# 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
# nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs --help
容器数据卷
什么是容器数据卷
docker的理念回顾
将应用和环境打包成一个镜像!
数据?如果数据都在容器中,那么我们容器删除,数据就会丢失! 需求:数据持久化
MySQL,容器删了,就等于删库跑路 需求:MySQL可以存储在本地!(数据持久化)
容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!
总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!
使用数据卷
分十一:直接使用命令来挂载 -v
docker run -it -v -p 主机端口:容器内端口