qaq
常用命令
docker run
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
docker run
:创建并运行一个容器,-d
是让容器在后台运行--name mysql
:给容器起一个名字,必须唯一-p 3306:3306
:设置端口映射(宿主机端口:容器内端口)- 容器在宿主机运行,容器有自己的内存空间甚至IP地址,但这个IP是外部无法访问的
- 可以将容器的端口和宿主机的端口建立端口映射,通过访问宿主机的相应端口访问容器
- 容器内端口取决于进程,不需要改动
-e KEY=VALUE
:设置环境变量- 环境变量由容器要求
mysql
:指定运行的镜像的名字- 完整:
[repository]:[tag]
- tag不写默认latest
- 完整:
docker images
- 查看本地镜像列表
docker save
- 将镜像保存成包
docker save -o nginx.tar nginx:latest
docker rmi
- 删除镜像
docker rmi nginx:latest
docker load
- 加载镜像包
docker load -i nginx.tar
docker ps
- 查看当前运行容器
docker ps
- 只显示运行的容器
docker ps -a
- 显示所有
docker stop
- 停止容器
docker stop nginx
docker start
- 启动容器
docker start nginx
docker logs
- 查看日志
docker logs nginx
docker logs -f nginx
-f
:follow- 一直查看日志,方便调试
docker exec
- 进入容器
docker exec -it nginx bash
docker rm
- 删除容器
docker rm mysql
数据卷
- 数据卷是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
- 创建数据卷会在宿主机文件系统
/var/lib/docker/volumes/卷名/_date
的位置 - 与容器内响应路径关联
- 可以使用宿主机内的编辑器修改容器内的文件内容
- 挂载需要再容器创建时就指定好,如果数据卷不存在会自动创建
docker run -v 数据卷:数据卷目录
常用命令
docker volume create
:创建数据卷docker volume ls
:查看所有数据卷docker volume rm
:删除指定数据卷docker volume inspect
:查看某个数据卷的详情docker volume prune
:删除未使用的数据卷docker inspect
:查看容器是否有数据卷挂载
匿名卷
- 容器运行自动创建的卷
- 不推荐使用,不方便迁移
自定义挂载
docker run -v 本地目录:容器内目录
- 本地目录必须以
/
或./
开头,否则会被认为是数据卷
自定义镜像
结构
- 逐层打包
- 可以利用已有的层
Dockerfile
是一个文本文件,包含一个个指令,用指令来说明要执行什么操作
指令
FROM
:指定基础镜像FROM centos:6
ENV
:设置环境变量ENV key value
COPY
:拷贝本地文件到镜像的指定目录COPY ./jrell.tar.gz /tmp
RUN
:执行Linux的shell命令RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path
EXPOSE
:指定容器运行时监听的端口,是给镜像使用者看的EXPOSE 8080
ENTRYPOINT
:镜像中应用的启动命令,容器运行时调用ENTRYPOINT java -jar xx.jar
使用
- cd进目录下
docker build -t 镜像名 Dockerfile目录
:docker build -t docker-demo .
.
是当前目录下的Dockerfile
容器网络互连
- 默认情况下,所有容器都是以bridge方式连接导Docker的一个虚拟网桥上
- 运行Docker的时候会创建一个虚拟网卡:
docker0
- 同时给虚拟网卡创建一个虚拟网桥
- 容器通过网桥和各自的IP建立联系
- 但是这样分配的IP是动态的,各种情况可能会重新分配
自定义网络
加入自定义网络的容器可以通过容器名相互访问
docker network create
docker network ls
docker network rm
docker network prune
docker network connect
docker network disconnect
docker network inspect
可以在创建容器的时候直接加入网桥,就不会加入默认网桥了
docker run --network