Docker基本操作
镜像相关命令
-
镜像名称一般分两部分组成:[repository]:[tag] -->[镜像名称]:[版本]
-
docker pull 镜像名称 (拉取镜像)
-
docker images [名称] (查看镜像){名称可加可不加}
-
docker save -o nginx.tar nginx:latest (保存镜像)
-
docker load -i nginx.tar (读取镜像)
-
docker rmi -i/-p redis:latest(-i有日志输出,-p没有日志输出)
-
容器相关的命令
-
docker run (创建并运行一个docker容器)
docker run --name containerName -p 80:80 -d nginx
- docker run:创建并运行一个容器
- -name:给容器起一个名字,比如叫做cyttest (全局唯一)
- -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口(可以随意,只要未被占用),右侧是容器端口
- -d: 后台运行容器
- nginx : 镜像名称
docker run --name cyttestredis -p 6379:6379 -d redis redis-server --appendonly yes
- 创建并运行一个redis容器,并支持数据持久化
-
docker pause (运行 --> 暂停)
-
docker unpause (暂停 --> 运行)
-
docker stop ( 运行 --> 停止)
docker stop cyttest
-
docker start (停止 --> 运行)
-
docker ps (查看所有运行的docker容器及其状态)
docker ps -a
- -a : 可以查看挂掉的容器
-
docker logs (查看容器运行日志)
docker logs cyttest docker logs -f cyttest
- docker logs 后面添加容器名称
- -f: 持续跟踪日志
-
docker exec (进入容器执行命令)
docker exec -it cyttest bash
- docker exec:进入容器内部,执行一个命令
- -t:给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
- cyttest:要进入的容器的名称
- bash:进入容器后执行的命令,bash是一个linux:终端交互命令
- exec虽然可以修改文件,但并不推荐
-
docker rm (删除指定容器)
docker rm -f
- -f : 加-f可以强制删除运行中的容器
数据卷:
容器与数据耦合问题:
- 不便于修改
- 数据不可复用
- 升级维护困难
数据卷: 是一个虚拟目录,指向宿主机文件系统中的某个目录
-
数据卷的基本操作命令:
docker volume [COMMAND]
- docker volume 命令是数据卷操作,依据命令后紧跟的command来确定下一步的操作
- create : 创建一个volume
- inspect 显示一个或多个volume的信息
- ls 列出所有的volume
- prune 删除未使用的volume
- rm 删除指定的一个或多个volume
-
挂载数据卷
-
基于数据卷挂载(示例nginx)
-
在创建容器时,可以通过 -v 参数来挂载一个数据卷到容器某个目录
docker run --name mn -p 80:80 -v hml:/root/html -d nginx
-
docker run:就是创建并运行容器
-name mn:给容器起个名字叫mn
-v html:/root/htm:把html数据卷挂载到容器内的/root/html这个目录中
-p8080:80:把宿主机的8080端口映射到容器内的80端口
nginx:镜像名称
-
基于宿主机文件挂载(示例mysql)
-
创建mysql的配置文件目录和数据目录
mkdir -p mysql/data mkdir -p mysql/conf
-
在创建容器时通过
-v
参数分别挂载配置文件目录和数据目录docker run --name cytdockermysql -e MYSQL_ROOT_PASSWORD=123 -p 9906:3306 -v /mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /mysql/data:/var/lib/mysql -d mysql:5.7.25
-
docker ps验证是否完成创建和启动
-
自定义镜像:
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
镜像结构:
入口(Entrypoint): 镜像运行入口,一般是程序启动的脚本和参数
层(Layer)在Baselmage基础上添加安装包、依赖、配置等,每次操作都形成新的一层。
基础镜像(Baselmage):应用依赖的系统函数库、环境、配置文件等
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每
一个指令都会形成一层Layer。
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./mysql-5.7.rpm /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN yum install gcc |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
-
生成测试
-
创建一个文件夹用来放置文件
mkdir docker-demo
-
上传需要构建的文件并在文件夹内部运行构建代码
docker build -t javawebtest:1.0 .
- javawebtest:1.0 :构建好之后的镜像名称:版本号
.
:相对Dockerfile的位置
-
查看是否构建成功
docker images
-
创建并运行docker容器
docker run --name webtest -p 8090:8090 -d javawebtest:1.0
-
测试是否成功
-
DockerCompose
- Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
- Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。