1.镜像操作
1.1 镜像名称
首先来看下镜像的名称组成:
- 镜名称一般分两部分组成:[repository]:[tag]。
- 在没有指定tag时,默认是latest,代表最新版本的镜像
如图:
这里的mysql就是repository,5.7就是tag,加起来就是完整的镜像名称,代表5.7版本的MySQL镜像。
1.2 镜像命令
常见的镜像操作命令如图:
1.3. 拉取、查看镜像
- 首先去镜像仓库搜索hello-world镜像,DockerHub:
- 根据查看到的镜像名称,拉取自己需要的镜像,通过命令:
docker pull hello-world
- 通过命令:
docker images查看拉取到的镜像
1.4 保存、导入镜像
-
利用docker xx --help命令查看docker save和docker load的语法
例如,查看save命令用法,可以输入命令:docker save --help
命令格式:
docker save -o [保存的目标文件名称] [镜像名称] -
使用docker save导出镜像到磁盘 运行命令:
docker save -o hello-world.tar hello-world:latest
- 使用docker load加载镜像
先删除本地的nginx镜像:
docker rmi hello-world:latest
然后运行命令,加载本地文件:
docker load -i hello-world.tar
2. 容器操作
2.1 容器相关命令
容器保护三个状态:
-
运行:进程正常运行
-
暂停:进程暂停,CPU不再运行,并不释放内存
-
停止:进程终止,回收进程占用的内存、CPU等资源 容器操作命令:
-
docker run:创建并运行一个容器,处于运行状态 -
docker pause:让一个运行的容器暂停 -
docker unpause:让一个容器从暂停状态恢复运行 -
docker stop:停止一个运行的容器 -
docker start:让一个停止的容器再次运行 -
docker rm:删除一个容器
2.2 创建并运行一个容器
创建并运行nginx容器的命令:
docker run -d \
-p 80:80 \
--name nginx \
nginx
命令参数:
docker run:创建并运行一个容器- –name : 指定容器名,不指定则运行后会返回一个唯一ID
- -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
- -d:后台运行容器
- nginx:要运行的镜像,如nginx、nginx:1.20.1,如果运行的镜像不存在则会去下载,然后运行容器,如果找不到镜像则会报错。 这里的-p参数,是将容器端口映射到宿主机端口。
查看容器状态:
docker ps
默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,无法访问到容器中的nginx。
通过-p将容器与宿主机端口映射,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:
访问Nginx:http://ip:80
2.3 进入容器并修改文件
进入容器要用到docker exec命令
步骤:
- 进入容器
docker exec -it nginx bash
docker exec:进入容器内部,执行一个命令- -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
- nginx:要进入的容器的名称
- bash:进入容器后执行的命令类型,bash是一个linux终端交互命令的一种
容器内部会基于构建时选择的’底层’模拟一个独立的Linux文件系统,同linux系统一样:
2. 进入nginx的 index.html 所在目录
cd /usr/share/nginx/html
-
修改index.html的内容 容器内没有vi命令,无法直接修改,可以通过下面的命令来修改:
sed -i -e 's#Welcome to nginx#Hello Docker!#g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html -
刷新页面查看修改结果:
- 通过
docker logs [容器ID/容器名]查看日志:
# 添加 -f 参数可监控日志输出
docker logs nginx
常用操作容器命令:
- docker run命令的常见参数
- –name:指定容器名称
- -p:指定端口映射
- -d:让容器后台运行
- 查看容器日志的命令:
docker logs- 添加 -f 参数可以持续查看日志
- 查看容器状态:
docker psdocker ps -a查看所有容器,包括已经停止的容器。
3.数据卷(容器数据管理)
3.1.什么是数据卷
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
完成数据卷挂载后,操作宿主机的/var/lib/docker/volumes/html目录的文件,就等于操作容器内的/usr/share/nginx/html目录的文件。
docker rm -f nginx
docker run -d \
--name nginx \
-p 80:80 \
-v /root/html:/usr/share/nginx/html \
nginx
3.2 数据集操作命令
数据卷操作的基本语法如下:
- 创建数据卷:
docker volume create dome_volume
- 查看所有数据卷:
docker volume ls
- 查看数据卷详细信息:
docker volume inspect dome_volume
可以看到,创建的
dome_volume这个数据卷关联的宿主机目录为/var/lib/docker/volumes/dome_volume/_data目录。
3.3 数据卷操作命令小结
数据卷的作用:
- 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。 数据卷操作:
docker volume create:创建数据卷docker volume ls:查看所有数据卷docker volume inspect:查看数据卷详细信息,包括关联的宿主机目录位置docker volume rm:删除指定数据卷docker volume prune:删除所有未使用的数据卷
3.4 挂载数据卷
创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:
docker run -d \
--name dome \
-v dome_volume:/root/xxx \
-p 8080:80 \
dome
这里的-v就是挂载数据卷的命令:
-v dome_volume:/root/xxx :把dome_volume数据卷挂载到容器内的/root/xxx这个目录中,实操可见上方nginx用例。
docker run的命令中通过 -v 参数挂载文件或目录到容器中:
- -v volume名称:容器内目录,PS:
dome_volume:/root/data - -v 宿主机文件:容器内文件,PS:
/root/conf/redis.conf:/etc/redis/redis.conf - -v 宿主机目录:容器内目录,PS:
/root/data:/lib/data