命令
镜像命令
- 镜像信息 docker images
repository 镜像名字
tag 镜像标签
image id 镜像id
create 镜像创建时间
size 镜像大小
-a 显示所有镜像
-q 只现实镜像id - 镜像搜索 docker search xxx
- 镜像下载 docker pull xxx:版本
- 镜像删除 docker rmi -f $(docker images -q mysql)
容器命令
- 运行 docker run [可选参数] xxx
- d 后台方式运行
- it 交互式运行,进入容器内查看命令
- p 指定容器端口
--name="Name"
设置容器名字,用来区分容器
- 从容器中返回主机 exit(容器停止退出)
- 容器不停止退出(CTRL+P+Q)
- 列出所有运行的容器 docker ps(同样支持-a -q)
- 移除容器 docker rm (-f 强制删除)
- 启动重启停止杀死 docker start/restart/stop/kill 容器id
常见命令
如果前台没有服务,那么后台自动关闭、
- 查看进程 docker top 容器id
- 进入正在运行的容器
- docker exec -it ceebc81e4789 /bin/bash #进入容器后开启一个新的终端
- docker attach #不会启动新的进程
- 将容器中的文件复制到主机中
docker cp 容器id:容器中的文件 主机中的目录
实例:安装docker
docker pull nginx
# -d后台运行
# --name 为容器起名
# -p 外端口和内端口
# 外端口是宿主机端口
# 内端口是容器中的端口
docker run -d --name nginx01 -p 1234:80 nginx #注意内端口是80,不然不能访问
提交镜像(commit)
容器 --> 镜像
# -a 创建者
# -m 提交信息
docker commit -a "chen" -m "add" 容器名字或者id 提交的镜像名
容器数据卷
将容器中的文件和宿主的文件双向绑定,只需要修改外部文件就可以修改容器中的文件,无需进入容器
# -v 外部目录:容器中目录 (双向绑定)【卷挂载】
# -e 配置环境 MYSQL_ROOT_PASSWORD=密码 (设置mysql密码)
docker run --name mysql01 -d -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql
如果没有指明具体路径,默认在 /var/lib/docker/volumes
- 具名挂载
-v 卷名:容器内路径
- 匿名挂在
-v 容器内路径
【不推荐】 - ro/rw 只读(容器只读)/ 读写
Dockerfile
就是命令脚本,通过Dockerfile来构建镜像
- FROM 指定基础镜像
- RUN 构建镜像时执行的命令 例
RUN yum -y install vim
- ADD 将本地文件加载到容器中
- CMD 文件镜像构建完成后执行
CMD ["ls","-a"]
- ENV 设置环境变量
- EXPOSE 暴露端口
- WORKDIR 工作目录,构建时的目录都在这个目录下进行
- CMD和ENTRYPOINT
cmd 追加命令会替换cmd
entrypoint 追加命令会直接追加在cmd后面 - 构建命令
# add的本地文件在url中
# t tag
# Dockerfile 的具体路径 默认PATH/Dockerfile
docker build -f 指定目录 -t 名字:版本号 创建的位置 url
Docker网络
- docker0 作为路由
每产生一个容器,就会生成一对网卡 负责容器和docker0互联,容器之间的连接时通过docker0之间的桥接实现 - –自定义网络
解决docker0无法ping名字的问题
# --subnet 设置子网
# --gatway 设置网关
docker network create --driver bridge --subnet 180.1.0.0/16 --gateway 180.1.0.1 网络名字
# 启动时使用自定义网络
# -P 随机选择一个端口号
# --net 使用特定网络
docker run -d -P --name tom03 --net mynet tomcat
- 解决两个网络的容器相互连接问题
通过给一个容器多个ip实现docker network connect 网络名 容器名
,这样网络会给容器分配一个ip,容器就可以来和这个网络建立连接
springboot打包docker
- 利用maven打jar包
mvn package
- 建立Dockerfile
FROM openjdk:8
COPY *.jar /app.jar
CMD ["--server.port=8000"]
EXPOSE 8000
ENTRYPOINT ["java","-jar","/app.jar"]
注意:
- java:8拉取失败,最后使用了openjdk:8,
- Dockerfile中设置的端口号需要和springboot中的配置文件一致
- docker build
- docker run
测试
- curl localhost:port