-
docker基础命令
systemctl start docker 启动docker systemctl stop docker 关闭docker systemctl restart docker 重启docker systemctl enable dockerdocker 设置随服务启动而自启动 systemctl status docker 查看docker运行状态 docker version 查看docker版本号信息 docker info docker --help docker帮助命令
-
docker镜像命令
docker images 查看自己服务器中docker 镜像列表 docker search 镜像名 搜索镜像 docker search --filter=STARS=9000 mysql 搜索 STARS >9000的 mysql 镜像 docker pull 镜像名 拉取镜像 docker pull 镜像名:tag docker pull mysql 拉取最新版 mysql docker run 镜像名 运行镜像 docker run 镜像名:Tag
-
docker容器命令
docker ps:列出运行中的容器 docker ps -a : 查看所有容器,包括未运行 docker stop 容器id或name:停止容器 docker kill 容器id:强制停止容器 docker start 容器id或name:启动已停止的容器 docker inspect 容器id:查看容器的所有信息 docker container logs 容器id:查看容器日志 docker top 容器id:查看容器里的进程 docker exec -it 容器id /bin/bash:进入容器 exit:退出容器 docker rm 容器id或name:删除已停止的容器 docker rm -f 容器id:删除正在运行的容器 docker exec -it 容器ID bash :进入容器
-
docker数据卷:Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在Docker中我们使用卷;卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
- 命令:运行容器,指定挂载数据卷命令:
docker run --name xxxx -p 8888:8888 -v /my:/docker -it imagename --name: 为容器起名字 -p:宿主机端口:docker端口 (端口映射) -v:宿主机目录:docker目录 (必须为绝对路径) docker volume create my-vol 创建数据卷 docker volume ls 查看所有的数据卷 docker volume inspect my-vol 查看指定数据卷的信息 docker inspect con-name 查看指定容器的信息 docker volume rm my-vol 删除数据卷 docker volume prune 删除未使用的数据卷 挂载主机目录 docker run -it --name c1 -v /宿主机目录:/docker目录 -it imagename /bin/bash
-
自定义镜像:Docker 镜像是 Docker 容器运⾏时的只读模板,每⼀个镜像由⼀系列的层 (layers) 组成
- 基于已有镜像创建
docker commit [选项] 容器ID/名称 仓库名称:[标签] -m:说明信息 -a:作者信息 -p:生成过程中停止容器的运行
- 基于本地模板创建
通过导入操作系统模板文件生成新的镜像,使用wget命令导入为本地镜像 wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz 导入成功后可查看本地镜像信息 docker images | grep new
- 基于Dockerfile创建:Dockerfile是由一组指令组成的文件,Dockerfile结构四部分:基础镜像信息,维护者信息,镜像操作指令,容器启动时执行指令,Dockerfile操作指令如下:
-
构建一个Java项目的镜像
- 创建Dockerfile
# 指定基础镜像 FROM eclipse-temurin:8-jre # 在镜像中执行命令,创建目录,并使用它作为工作目录 RUN mkdir -p /project # 设置工作目录,即后续命令的默认执行路径 WORKDIR /project # 复制文件或目录到镜像中。可以将本地文件或目录复制到镜像的指定位置。 COPY ./code-safe.jar /project/code-safe.jar # 设置环境变量 # 指定容器的时区 ENV TZ=Asia/Shanghai # 用于配置 Java 虚拟机的选项,如初始堆大小、最大堆大小和随机数生成器,可通过 docker run -e "JAVA_OPTS=" 进行覆盖 ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom" ## 应用参数 ENV ARGS="" # 定义容器启动后执行的命令,启动后端项目 CMD java ${JAVA_OPTS} -jar code-safe.jar $ARGS # 声明要监听的端口 EXPOSE 16000
-
使用eclipse-temurin:8-jre作为基础镜像,然后,我们创建一个工作目录/project,并将Java项目的可执行JAR文件复制到容器中的该目录下。设置了一些环境变量,用于配置Java虚拟机的选项和应用参数。其中,JAVA_OPTS用于配置Java虚拟机的一些选项,如初始堆大小和最大堆大小。我们还定义了一个ARGS环境变量,用于传递应用程序的命令行参数。最后,我们使用CMD指令定义容器启动后要执行的命令。
-
构建镜像,将资源jar包,Dockerfile 放在同一个目录中
docker build -t java .
- 查看镜像是否构建成功
docker images
- 使用docker run命令来运行容器
docker run -d -p 16000:16000 --name myjava java:latest
- 容器是否运行成功
docker ps -a
-
docker自定义网络
- 帮助命令与查看所有的网络
docker network --help docker network ls
- 网络模式
网络模式 配置 说明 bridge模式 –net=bridge 默认值,在Docker网桥docker0上为容器创建新的网络栈 none模式 –net=none 不配置网络,用户可以稍后进入容器,自行配置 container模式 –net=container:name/id 容器和另外一个容器共享Network namespace。kubernetes中的pod就是多个容器共享一个Network namespace host模式 –net=host 容器和宿主机共享Network namespace 用户自定义 –net=自定义网络 用户自己使用network相关命令定义网络,创建容器的时候可以指定为自己定义的网络 - 创建 mynet 网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 查看网络 docker network ls 查看 mynet 网络详细信息 docker network inspect mynet
- 启动容器,并加入mynet网络
docker run -it -P --name mynet-tomcat01 --net mynet tomcat