镜像命令:
docker images ——查看本地仓库所有镜像
docker pull 镜像名:镜像tag(版本) ——从远程仓库拉取该镜像,不写版本默认latest
docker search 镜像名:镜像tag(版本) —— 远程仓库查找该镜像,不写版本默认latest
docker rmi 镜像名:镜像tag(版本) ——删除本地仓库镜像,不写版本默认latest
docker rmi -f 镜像名:镜像tag(版本) ——强制删除本地仓库镜像,不写版本默认latest
docker images -q ——查看所有镜像的id
docker rmi -f $(docker images [镜像名] -q) ——删除所有[镜像名的]镜像
例:docker rmi -f $(docker images tomcat -q) ——删除所有tomcat镜像
容器命令(常用):
docker run -d -p 本机端口号:容器端口号 --name 容器名 镜像id/镜像名:tag ——后台运行一个容器,并设置本地和容器内部的端口映射
例:docker run -d -p 8081:8080 --name tomcat01 tomcat:8.0 ——后台运行tomcat:8.0这个镜像,本机端口8081映射容器内部端口8080,容器名tomcat01。外部访问tomcat01路径:http://本地ip地址:8081
docker stop 容器id/容器名——停止正在运行的容器
docker start 容器id/容器名——启动停止的容器
docker restart 容器id/容器名——重启容器
docker pause 容器id/容器名——暂停一个容器
docker unpause 容器id/容器名——取消暂停
docker rm 容器id/容器名——删除容器
docker rm -f 容器id/容器名——强制删除容器
docker kill 容器id/容器名——杀死容器,和rm的区别是rm会让容器有个缓冲时间再关闭
docker ps -a ——查看所有容器
docker ps -aq ——查看所有容器的id
docker exec -it 容器id/容器名 bash ——进入一个容器内部,bash窗口操作
docker cp 文件 容器id/容器名:路径 —— 将本地文件拷贝到容器中
docker cp 容器id/容器名:文件 本地路径 ——将容器中的文件拷贝到本地
docker top 容器id/容器名——查看容器内运行进程
docker inspect 容器id/容器名——查看容器内部细节
docker run -v 本机绝对路径:容器路径——添加数据卷,清空容器内路径的内容
docker run -v 本机绝对路径:容器路径 ro——添加数据卷、容器内路径只读,清空容器内路径的内容
docker run -v 本机文件夹别名:容器路径——添加数据集、不清空容器内路径的内容
docker commit -m "描述信息" -a "作者" 容器id/容器名 镜像名:tag ——将容器打成镜像
docker save 镜像名:tag -o tar文件名——将镜像打成tar包
docker load -i tar文件——将tar文件加载为镜像
![](https://img-blog.csdnimg.cn/img_convert/289942f903748e75998632b6b3dc1eeb.png)
使用docker启动mysql
docker run -d -p 3306:3306 --name mysql01 --restart=always -v /home/lzh/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker pull mysql:5.7
解释:-d后台运行,-p端口映射,--name给容器起名字,--restart=always容器会随着docker引擎的重启动而重启动,-v设置容器数据卷持久化保存mysql数据,-e MYSQL_ROOT_PASSWORD=123456 设置mysql容器访问账号root密码123456
redisconfig下存放redis.conf 只需配置需要的内容如:
使用docker启动redis
第一种方式:
docker run -d -p 6379:6379 --name redis01 --restart=always -v /home/lzh/data/redis:/data redis:6.08 redis-server --appendonly yes
--appendonly yes 代表使用aof持久化,生成在/data文件夹下,同步到本机/home/lzh/data/redis
第二种方式:
docker run -d -p 6379:6379 --name redis01 --restart=always -v /home/lzh/data/redisconfig:/data redis:6.0 redis-server /data/redis.conf
appendonly yes #开启aof持久化方案
appendfilename aa.aof #aof生成文件名
这样就会在本机redisconfig生成aa.aof文件到本机备份了
docker网络
用处:
容器间通信,当两个容器处于一个网桥上时可以互相发送请求,如:当两个tomcat容器,可以在容器内部使用 curl http://ip或容器名:8080互相访问
docker network create -d bridge 网络名称——创建网桥
docker network ls ——查看网络
docker network inspect 网络名——查看网络细节
docker network rm 网络名——删除网络
docker network prune ——删除没被使用的网络
docker run --network 网络名——运行容器时将容器加入到某个网络
docker network connect 网络名 容器名/容器id ——运行容器后将一个容器加入 一个网络
docker inspect 容器名/容器id 查看容器IP
docker容器启动时默认加入docker0网桥,只有在同一个网络下的容器才能互相访问,默认情况容器启动便可以互相访问。
docker 数据卷
docker volume create 数据卷别名——创建一个数据卷
docker volume ls——列出全部数据卷
docker volume rm 数据卷名称——删除数据卷
docker volume inspect 数据卷名称——查看数据卷详细信息
Dockerfile
Dockerfile就是docker镜像的描述文件
![](https://img-blog.csdnimg.cn/img_convert/d23f5a6b89ce335bcc2e3e264d020c16.png)
Docker-Compose
作用:管理容器,一次可以启动多个容器并且管理先后顺序、设置网络。一个正在运行的容器即是一个服务。
下载docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
启动命令
docker-compose up
编写方式和Dockerfile类似,需要编写docker-compose.yml文件
示例(Dockerfile,docker-compose.yml同时使用):
创建一个最简单的SpringBoot的demo,连接mysql提供一个查询接口。
mysql连接url,其中mysql:3306中的mysql是服务名。
jdbc:mysql://mysql:3306/dockertest?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
Dockerfile:
FROM openjdk:8-jre
WORKDIR /home/lzh/
ADD ./demo-0.0.1-SNAPSHOT.jar ./demo.jar
EXPOSE 8989
ENTRYPOINT ["java","-jar"]
CMD ["demo.jar"]
docker-compose.yml
version:"3.3"
services:
mysql: #服务名
image: mysql:8.0
ports:
- "3306:3306" #端口映射
networks:
- demo #设置网桥
environment:
MYSQL_ROOT_PASSWORD: 123456 #设置mysql访问账号密码
volumes: "/home/lzh/mysql/bak:/var/lib/mysql" #设置mysql持久化
restart: always #随着docker重启动
demo: #demo服务名
build: ./ #Dockerfile方式构建,指定Dockerfile路径
depends_on: mysql #mysql服务启动差不多了再启动
networks:
- demo #和mysql同一个网桥
ports:
- "8989:8989" #暴露端口
networks:
demo: #docker-compose up执行时会先创建demo网桥
将demo的jar包和Dockerfile,docker-compose.yml放在同一个目录并进入该目录
![](https://img-blog.csdnimg.cn/img_convert/46922cf82c9e0edaab69b39f38928cc0.png)
执行docker-compose up
启动成功。接口也能正常访问。
![](https://img-blog.csdnimg.cn/img_convert/5fbbd72849a25d17045319a40b9cb310.png)
更多请移步至中文手册:https://www.coonote.com/docker/docker-tutorial.html