docker镜像仓库网站
Docker Hubhttps://hub.docker.com/容器命令
1.以nginx为例,创建并运行一个nginx容器
docker run --name myNginx -p 80:80 -d nginx
命令解读:
docker run :创建并运行一个容器
--name : 给容器起一个名字,比如叫做myNginx
-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
-d:后台运行容器
lnginx:镜像名称,例如nginx
2.查看容器日志的命令:
docker logs myNginx # 添加 -f 参数可以持续查看日志
docker logs myNginx -f
3.查看容器状态
docker ps
# 添加-a参数查看所有状态的容器,默认查看运行的容器 。
docker ps -a # 查看所有参数
4.停止容器运行
docker stop myNginx
5. 运行容器
docker start myNginx
6.进入容器
docker exec -it myNginx bash
命令解读:
docker exec :进入容器内部,执行一个命令
-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
mn :要进入的容器的名称
bash:进入容器后执行的命令,bash是一个linux终端交互命令
7.删除容器
docker rm myNginx
# 不能删除运行中的容器,除非添加 -f 参数
docker rm myNginx -f
数据卷命令
数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷操作的基本语法:
docker volume [COMMAND]
docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
docker volume create # 创建一个volume
docker volume inspect # 显示一个或多个volume的信息
docker volume ls # 列出所有的volume
docker volume prune # 删除未使用的volume
docker volume rm # 删除一个或多个指定的volume
数据卷的作用:
将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
数据卷操作:
docker volume create
docker volume ls
docker volume inspect
docker volume rm
docker volume prune
挂载数据卷
数据卷挂载的两种方式:
1.数据卷挂载
2.目录直接挂载的
在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录
docker run --name mn -v html:/usr/share/nginx/html -p 80:80 -d nginx
命令解读:
docker run :就是创建并运行容器
-- name mn :给容器起个名字叫mn
-v html:/usr/share/nginx/html :把html数据卷挂载到容器内的/usr/share/nginx/html这个目录中
-p 8080:80 :把宿主机的8080端口映射到容器内的80端口
nginx :镜像名称
如果没有html数据卷,会自动创健一个。
1.docker run 的命令中通过 -v 参数挂载文件或目录到容器中:① -v volume 名称 : 容器内目录② -v 宿主机文件 : 容器内文件③ -v 宿主机目录 : 容器内目录2. 数据卷挂载与目录直接挂载的优缺点① 数据卷挂载耦合度低,由 docker 来管理目录,但是目录较深,不好找② 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看
Dockerfile自定义镜像
镜像结构:镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。
镜像是分层结构,每一层称为一个Layer
BaseImage层:包含基本的系统函数库、环境变量、文件系统
Entrypoint:入口,是镜像中应用启动的命令
其它:在BaseImage基础上添加依赖、安装程序、完成整个应用的安装和配置
什么是Dockerfile?
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
基于Ubuntu镜像构建一个新镜像,运行一个java项目:
创健一个新的文件夹,里面放入需要的资源‘
Dockerfile:
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
执行命令:
docker build -t webapp:1.0 .
如图已经构建成功了。
基于java:8-alpine镜像,将一个Java项目构建为镜像:
将Dockerfile改成如下所示:
# 指定基础镜像
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
再build即可:
docker build -t webapp:2.0 .
实现思路如下:
①新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
②拷贝我们的webapp.jar到这个目录中
③编写Dockerfile文件:
a)基于java:8-alpine作为基础镜像
b)将app.jar拷贝到镜像中
c)暴露端口
d)编写入口ENTRYPOINT
④使用docker build命令构建镜像
⑤使用docker run创建容器并运行