Docker学习
镜像命名规范
镜像名称由两部分组成:[repository]:[tag]
repository就是镜像名
tag是镜像的版本
在没有指定tag时,默认为latest,代表最新版本的镜像
docker run命令的常见参数
-d: 让容器后台运行
--name: 给容器命名
-e: 环境变量
-p: 端口映射,宿主机端口:容器内端口
常见命令
镜像相关命令
搜索镜像:在 Docker Hub 上搜索镜像。
docker search [OPTIONS] TERM
拉取镜像:从仓库中拉取一个或多个镜像。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
列出本地镜像:显示所有本地存储的镜像。
docker images [OPTIONS] [REPOSITORY[:TAG]]
构建镜像:根据 Dockerfile 构建一个新的镜像。
docker build [OPTIONS] PATH | URL | -
保存镜像:将一个或多个镜像保存为 tar 归档文件。
docker save [OPTIONS] IMAGE [IMAGE...]
加载镜像:从 tar 归档文件中加载镜像。
docker load [OPTIONS]
删除镜像:移除一个或多个本地镜像。
docker rmi [OPTIONS] IMAGE [IMAGE...]
给镜像打标签:为本地镜像添加新的标签。
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
容器相关命令
运行容器:创建并启动一个新的容器。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
列出容器:显示所有正在运行的容器(加上
-a
显示所有容器)。docker ps [OPTIONS]
停止容器:停止一个或多个运行中的容器。
docker stop [OPTIONS] CONTAINER [CONTAINER...]
启动容器:启动一个或多个已停止的容器。
docker start [OPTIONS] CONTAINER [CONTAINER...]
重启容器:重启一个或多个容器。
docker restart [OPTIONS] CONTAINER [CONTAINER...]
删除容器:移除一个或多个容器。
docker rm [OPTIONS] CONTAINER [CONTAINER...]
强制删除容器:即使容器正在运行也可以立即删除。
docker rm -f [OPTIONS] CONTAINER [CONTAINER...]
查看容器日志:获取容器的日志输出。
docker logs [OPTIONS] CONTAINER
进入容器:打开一个交互式 shell 进入容器内部。
docker exec -it CONTAINER /bin/bash # 或者 sh 如果是 alpine 等精简系统
暂停容器:暂停容器的所有进程。
docker pause CONTAINER
恢复容器:恢复之前被暂停的容器。
docker unpause CONTAINER
导出容器:将容器导出为 tar 文件。
docker export [OPTIONS] CONTAINER
导入容器:从 tar 文件导入内容作为一个新的文件系统镜像。
cat container.tar | docker import - example/imagename
其他常用命令
查看版本信息:显示 Docker 版本信息。
docker version
查看系统信息:显示 Docker 系统信息,包括镜像和容器的数量等。
docker info
清理未使用的资源:移除所有未使用的容器、网络、镜像以及可选地挂载点。
docker system prune [OPTIONS]
登录注册表:登录到 Docker 注册表,如 Docker Hub。
docker login [OPTIONS] [REGISTRY]
推送镜像:将本地镜像推送到注册表。
docker push NAME[:TAG]
查看命令帮助:获取更多关于特定命令的帮助。
docker COMMAND --help
查看容器、镜像、网络、数据卷等详细信息:获取Docker对象的配置、状态、网络设置、挂载点等详细信息。
docker inspect <OBJECT_TYPE> <OBJECT_NAME_OR_ID>
全部Docker命令
想要查询更多docker命令,可以去菜鸟教程查看https://www.runoob.com/docker/docker-command-manual.html
使用别名简化Docker命令
编辑 ~/.bashrc 文件,给命令起别名,简化Docker命令。
vim ~/.bashrc
加上需要简化的Docker命令。例如:
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'
保存退出,再重新加载此文件
source ~/.bashrc
接下来就可以使用简化后的命令了。如下:
数据卷
介绍
Docker 数据卷(Volumes)是 Docker 中用于管理持久化数据的主要机制。它们为容器提供了一种独立于容器生命周期的数据存储方式,确保即使容器被删除或重新创建,数据仍然可以保持不变和可用。
使用数据卷,可以将容器内的文件夹与宿主机的文件夹通过数据卷进行双向绑定。这样,即使容器停止或删除,数据都不会消失,依然保存在宿主机上。并且,这样我们就可以直接通过操作宿主机上的文件来操作容器内的文件。
当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷。
如图例:
Nginx容器的 /etc/nginx/conf/_data/ 挂载到宿主机的 /var/lib/docker/conf/ 下,
Nginx容器的 /usr/share/nginx/html/_data 挂载到宿主机的 /var/lib/docker/volumes/html/ 下。
注意:_data是宿主机实际存储文件的文件夹!
常用命令
1. 创建数据卷
创建一个新的 Docker 数据卷。
命令:
docker volume create <volume_name>
示例:
docker volume create my_volume
2. 查看所有数据卷
列出所有已创建的 Docker 数据卷。
命令:
docker volume ls
3. 查看数据卷详细信息
查看某个数据卷的详细信息。
命令:
docker volume inspect <volume_name>
示例:
docker volume inspect my_volume
4. 删除数据卷
删除一个或多个数据卷。
命令:
docker volume rm <volume_name>
示例:
docker volume rm my_volume
5. 删除所有未使用的数据卷
删除所有未被容器使用的数据卷。
命令:
docker volume prune
6. 在容器中使用数据卷
将数据卷挂载到容器的指定路径。
命令:
docker run -v <volume_name>:<container_path> <image_name>
示例:
docker run -d -v my_volume:/app/data nginx
7. 挂载主机目录作为数据卷
将主机上的目录挂载到容器中。
命令:
docker run -v <host_path>:<container_path> <image_name>
示例:
docker run -d -v /home/user/data:/app/data nginx
8. 查看容器挂载的数据卷
查看某个容器挂载的数据卷信息。
命令:
docker inspect <container_id> --format='{{.Mounts}}'
示例:
docker inspect my_container --format='{{.Mounts}}'
9. 备份数据卷
将数据卷的内容备份到主机上的一个文件。
命令:
docker run --rm -v <volume_name>:/volume -v <host_backup_dir>:/backup busybox tar cvf /backup/backup.tar /volume
示例:
docker run --rm -v my_volume:/volume -v /home/user/backups:/backup busybox tar cvf /backup/backup.tar /volume
10. 恢复数据卷
从备份文件恢复数据卷的内容。
命令:
docker run --rm -v <volume_name>:/volume -v <host_backup_dir>:/backup busybox tar xvf /backup/backup.tar -C /volume
示例:
docker run --rm -v my_volume:/volume -v /home/user/backups:/backup busybox tar xvf /backup/backup.tar -C /volume
数据卷挂载与目录挂载的区别
一、数据卷挂载
1.什么是数据卷?
数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据。
2.什么是数据卷挂载?
数据卷挂载是将主机上的一个目录或文件作为数据卷挂载到容器中,这个数据卷可以被多个容器共享,容器之间可以通过这个数据卷进行数据交换。数据卷挂载的好处是可以将数据从容器中分离出来,方便备份和迁移,同时也可以避免容器被删除时数据的丢失。
3.如何挂载数据卷?
(1)在创建容器时,利用【-v 数据卷名:容器内目录】完成挂载;
(2)容器创建时,如果发现挂载的数据卷不存在时,会自动创建;
4.数据卷的常见命令有哪些?
(1)docker volume ls # 查看数据卷
(2)docker volume rm # 删除数据卷
(3)docker volume inspect # 查看数据卷详情
(4)docker volume prune # 删除未使用的数据卷
5.如何查看某个容器挂载了哪些数据卷?
(1)docker inspect 容器名
(2)查看返回数据对象中的Mounts键对应的值
二、目录挂载
1.什么是目录挂载?
目录挂载是将主机上的一个目录直接挂载到容器中,容器中的文件会直接覆盖主机上的文件,这种方式不适合多个容器共享数据。目录挂载的好处是可以方便地将主机上的文件或目录与容器中的文件或目录进行同步,方便开发和调试。
2.如何进行目录挂载?
在创建容器时,利用【-v 本地目录:容器内目录】完成挂载;
三、二者区别
数据卷挂载适合多个容器共享数据,而目录挂载适合单个容器与主机之间进行数据交换。
四、提示
注意二者写法上的区别,例如在实例化MySQL容器时挂载写法
-v mysql:/val/lib/mysql 会识别为一个数据卷叫mysql
-v ./mysql:/val/lib/mysql 会识别为当前目录下的mysql目录
自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程就是将上述文件打包的过程。
镜像结构
镜像结构分为层(Layer)和基础镜像(BaseImage)