以mysql安装为例子
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql
-d 表示后台执行
–name 容器的名字
-p 宿主机和容器映射的端口
-e 环境变量的设置 此处设置了时区和密码
最下方的mysql
指此镜像名字(官方名字)
一般此处的镜像名称结构是 Repository:TAG
镜像名+版本号
若像此处没有写上版本号 就默认是安装最新版本镜像的容器
远端指的是dockerHub
docker images 查看所有的镜像
docker ps 查看所有的容器及其状态
docker build 构建自己的镜像 通过Dockerfile
docker save 保存镜像为本地文件
docker load 加载本地镜像
docker rmi 移除镜像
docker run 运行镜像 创建容器 如果本地找不到对应的镜像文件 会到远端去找
docker logs 查看docker日志
docker exec 运行docker容器
docker stop 停止(暂停)运行中的镜像
docker start 重新运行构建容器
docker支持类似断点续传的功能 当构建容器的过程中意外暂停了传输 可以通过
docker start
重新运行起这个过程 并可以通过docker ps
来查看容器的安装状态
补充:
docker ps --format "table {{ID}\t{{.Image}r\t{{.Ports}}\t{{.Status}]\t{{.Names}}"
在查看容器状态的时候 自定义容器的格式
docker容器具有多个特点,是一个在最大程度上最小化依赖和相关组件的单位。这一特点使docker更加的轻量化,提高操作的效率。但同时也带来了某些不便,因为在开发中,我们通常需要修改对应容器的配置。例如修改mysql的端口,在通常情况下,我们需要通过vim等编辑器进入配置文件的内部进行手动修改。但是在docker包装的linux环境中,由于最小化依赖的要求,我们通常不能通过vi进入文件内部编辑。
试使用docker exec
+ vi
[root@localhost ~]# docker exec -it nginx bash
root@6f6dd1f6932d:/# cd /usr/share/nginx/html
root@6f6dd1f6932d:/usr/share/nginx/html# ls
50x.html index.html
root@6f6dd1f6932d:/usr/share/nginx/html# vi index.html
bash: vi: command not found
所以为了解决日常开发中的这一类需求 docker引出了数据卷挂载的概念。顾名思义,就是在宿主机的建立对应的目录及文件,映射到容器当中去
宿主机和nginx中的对应目录是双向绑定的,当在宿主机的映射文件中做修改时,会同步到容器当中去。相反,在容器内部进行修改的时候,也会同步到宿主机的文件系统中去。
了解概念之后,学习如何操作数据卷
指令 | 作用 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷 |
docker volume prune | 清除数据卷 |
以下以nginx创建容器时手动挂载为例
nginx中存放静态资源的目录是/usr/share/nginx/html
确认挂载目录的写法是否正确
在执行docker run命令时,使用-v 本地目录
:容器内目录可以完成本地目录挂载
本地目录必须以“”或"/"开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:var/ib/mysql
会被识别为一个数据卷叫mysql docker会默认存放到宿主机中数据卷的目录 如上nginx中的/var/lib/docker/volumes/html/_data
-v./mysql:Nar/Iib/mysql
会被识别为当前目录下的mysql目录
[root@localhost ~]# docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html
c25c429f3e8ed1470bc27df6ffcdb41d224bfb19087ec66624e24d1c6f8c323d
创建容器并返回容器的id 可使用docker ps观察容器状态
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local html
[root@localhost ~]# docker volume inspect html
[
{
"CreatedAt": "2024-02-25T17:00:17+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/html/_data",
"Name": "html",
"Options": null,
"Scope": "local"
}
]
MountPoint
则是对应宿主机中的目录路径
可以在宿主机cd到对应的目录中
[root@localhost ~]# cd /var/lib/docker/volumes/html/_data
[root@localhost _data]# ls
50x.html index.html
发现经典两文件 这时候可以通过宿主机上的编辑器对映射文件进行修改,或者是新增静态资源。操作完毕之后可以再次通过docker exec
进入容器内部,会发现挂载目录下资源或文件已经修改完成