docker命令(常用、简洁)
最近618活动抢了一个腾讯云服务器,购买地址,120买一个2核4g的很划算了。我选择的镜像是centOS自带docker的版本。操作的控制台也包含了容器操作,感觉很方便:
在此记录一下docker的简单操作命令吧:
镜像操作
相关命令:
-
docker images 查看当前docker下的镜像。
-
docker rmi 删除镜像,后面跟镜像名称。eg: docker rmi redis:5.0.15
-
docker pull 拉取镜像,后面跟镜像名称,这个通常在dockerHub里面查找镜像。eg: docker pull redis:5.0.15
-
docker push 推送镜像
-
docker save 保存镜像为一个压缩包,eg:docker save -o redis.tar myRedis
-
docker load 从压缩包中加载进行,相当于本地的pull。eg:docker load -i redis.tar
一图胜千言:
容器相关命令
容器有些java new出来的实例对象了。相关命令如下:
- docker run 这个命令是最常用的最基础的了,如下解释:
eg:docker run --name myNginx -p 80:80 -d nginx
docker run :创建并运行一个容器
–name : 给容器起一个名字,比如叫做mn
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
nginx:镜像名称,例如nginx
- docker logs 查看容器日志命令,加-f为持续
- docker ps 查看容器状态,加-a看所有
- docker exec -it mn bash 进入容器内部,平常不这样用
- docker rm 删除容器,添加-f强制删除
eg:创建并运行一个redis容器,并且支持数据持久化
docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes
数据卷操作
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
基本命令如下:
docker volume [COMMAND]
数据卷挂载操作
把容器内部的数据和外部(宿主机)上的数据关联起来,修改外部数据,内部数据也发生变化。比如把nginx内部的html文件挂载出来:
命令如下:
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
Dockerfile自定义镜像
常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。
而要自定义镜像,就必须先了解镜像的结构才行。
镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
我们以MySQL为例,来看看镜像的组成结构:
简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。
我们要构建镜像,其实就是实现上述打包的过程。
dockerFile语法:
构建自定义的镜像时,并不需要一个个文件去拷贝,打包。
我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
自己写的一个java项目build需要的dockerfile(基于java:8-alpine作为基础镜像):
# 指定基础镜像
FROM java:8-alpine
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝java项目的包
COPY ./studio-city-1.0.jar /opt/CJY/docker-demo/app.jar
# 暴露端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT java -jar /opt/CJY /docker-demo/app.jar
放入一个文件夹中的运行命令:
docker build -t javaweb:1.0 .
DockerCompose部署分布式应用
Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。格式如下:
version: "3.8"
services:
mysql:
image: mysql:5.7.25
environment:
MYSQL_ROOT_PASSWORD: 123
volumes:
- "/tmp/mysql/data:/var/lib/mysql"
- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"
web:
build: .
ports:
- "8090:8090"
上面的Compose文件就描述一个项目,其中包含两个容器:
- mysql:一个基于
mysql:5.7.25
镜像构建的容器,并且挂载了两个目录 - web:一个基于
docker build
临时构建的镜像容器,映射端口时8090
DockerCompose的详细语法参考官网:DockerCompose语法
详细使用请参考我的另一篇文章:使用DockerCompose搭建es集群: