一、镜像相关命令
- 镜像名称一般分两部分组成:[repository]:[tag]。
- 在没有指定tag时,默认是latest,代表最新版本的镜像
镜像操作有哪些? - docker images 查看镜像
- docker rmi 删除镜像
- docker pull 拉取镜像
- docker push 推送镜像
- docker save 保存镜像
- docker load 加载镜像
- docker xx --help 查看命令如何使用
二、容器相关命令
- docker run + 镜像名称 运行容器
- docker pause 暂停
- docker unpause 恢复运行
- docker stop 停止运行
- docker start 重新开始运行
- docker exec 进入容器执行命令,命令是docker exec -it [容器名] [要执行的命令],exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的,一是不方便,二在容器中的修改没有记录。
- docker logs 查看容器运行日志,添加 -f 参数可以持续查看日志
- docker ps 查看所有运行的容器及状态,添加-a参数查看所有状态的容器
- docker rm 删除容器,不能删除运行中的容器,除非添加 -f 参数
案例1:创建运行一个Nginx容器
步骤一:去docker hub查看Nginx的容器运行命令
docker run --name containerName -p 80:80 -d nginx
命令解读:
- docker run :创建并运行一个容器
- –name : 给容器起一个名字,比如叫做mn
- -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
- -d:后台运行容器
- nginx:镜像名称,例如nginx
在这里通过宿主机的ip + 80端口 就可以访问容器的80端口,访问到nginx。
案例2:进入Nginx容器,修改HTML文件内容,添加“传智教育欢迎您”
步骤一:进入容器。进入我们刚刚创建的nginx容器的命令为:
docker exec -it mn bash
命令解读:
- docker exec :进入容器内部,执行一个命令
- -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
- mn :要进入的容器的名称
- bash:进入容器后执行的命令,bash是一个linux终端交互命令
步骤二:进入nginx的HTML所在目录 /usr/share/nginx/html
cd /usr/share/nginx/html
步骤三:修改index.html的内容,这里用不了vi命令,容器中没有。
sed -i 's#Welcome to nginx#传智教育欢迎您#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
案例三:创建并运行一个redis容器,并且支持数据持久化
步骤一:到DockerHub搜索Redis镜像
步骤二:查看Redis镜像文档中的帮助信息
步骤三:利用docker run 命令运行一个Redis容器
docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes
案例四:进入redis容器,并执行redis-cli客户端命令,存入num=666
步骤一:进入redis容器
docker exec -it redis bash
步骤二:执行redis-cli客户端命令
redis-cli
步骤三:设置数据num=666
set num 666
三、数据卷相关命令
1. 容器与数据耦合的问题:
所以必须想办法解决容器与数据耦合的问题,所以就需要学习数据卷。
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
2. 数据卷的作用:
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全。
3. 数据卷操作:
- docker volume create 创建一个volume
- docker volume ls 显示一个或多个volume的信息
- docker volume inspect 列出所有的volume
- docker volume rm 删除未使用的volume
- docker volume prune 删除一个或多个指定的volume
案例1:创建一个数据卷,并查看数据卷在宿主机的目录位置
步骤一:创建数据卷
docker volume create html
步骤二:查看所有数据
docker volume ls
步骤三:查看数据卷详细信息卷
docker volume inspect html
4. 挂载数据卷:
我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录。
例如:docker run --name mn -v html:/root/html -p 8080:80 nginx
- docker run :就是创建并运行容器
- – name mn :给容器起个名字叫mn
- -v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中
- -p 8080:80 :把宿主机的8080端口映射到容器内的80端口
- nginx :镜像名称
案例1:创建一个nginx容器,修改容器内的html目录内的index.html内容
需求说明:上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置/usr/share/nginx/html ,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。
步骤:
- 创建容器并挂载数据卷到容器内的HTML目录
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
- 进入html数据卷所在位置,并修改HTML内容
# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html
ps: 如果容器运行时数据卷volume不存在,docker会帮我们自动创建出来。
5. docker run 挂载宿主机文件或目录到容器中:
目录挂载与数据卷挂载的语法是类似的:
- -v volume名称:容器内目录
- -v 宿主机文件:容器内文件
- -v 宿主机目录:容器内目录
数据卷挂载与目录直接挂载的比较: - 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找。
- 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看。