Docker基本使用

网友投稿 757 2022-10-23 21:50:18

Docker基本使用

@[toc]

1. 镜像和容器

镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。 容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

2. Docker和DockerHub

DockerHub:DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。

3. docker架构

4. 镜像相关命令

5. 镜像操作命令

从DockerHub中拉取一个nginx镜像并查看

利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

3、使用docker load加载镜像

6. 容器相关命令

6.1 创建运行一个Nginx容器

步骤一:去docker hub查看Nginx的容器运行命令

docker run --name containerName -p 80:80 -d nginx

命令解读:1、docker run :创建并运行一个容器2、--name : 给容器起一个名字,比如叫做nx3、-p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器4、nginx:镜像名称,例如nginx,不写版本默认最新版

6.2 进入Nginx容器,修改HTML文件内容

步骤一:进入容器。进入我们刚刚创建的nginx容器的命令为:

docker exec -it nx bash

命令解读:docker exec :进入容器内部,执行一个命令-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互nx :要进入的容器的名称,如:nginx 别名 nxbash:进入容器后执行的命令,bash是一个linux终端交互命令 步骤二:进入nginx的HTML所在目录 /usr/share/nginx/html

cd /usr/share/nginx/html

步骤三:修改index.html的内容

sed -i 's#Welcome to nginx#兮动人#g' index.html sed -i 's###g' index.html

查看容器状态:docker ps 添加-a参数查看所有状态的容器 删除容器:docker rm 不能删除运行中的容器,除非添加 -f 参数 进入容器:命令docker exec -it [容器名] [要执行的命令]exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的

7. 数据卷

docker volume [COMMAND]

docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:1、 create 创建一个volume2、inspect 显示一个或多个volume的信息3、ls 列出所有的volume4、prune 删除未使用的volume5、rm 删除一个或多个指定的volume

7.1 创建一个数据卷,并查看数据卷在宿主机的目录位置

1、创建数据卷

docker volume create html

2、查看所有数据

docker volume ls

3、查看数据卷详细信息卷

docker volume inspect html

4、删除未使用的volume

docker volume prune

5、删除一个或多个指定的volume

docker volume rm html

数据卷的作用:将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全 数据卷操作:

docker volume create docker volume ls docker volume inspect docker volume rm docker volume prune

8. 挂载数据卷

创建一个nginx容器,修改容器内的html目录内的index.html内容 需求说明:nginx的html目录所在位置/usr/share/nginx/html ,需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。 提示:运行容器时使用 -v 参数挂载数据卷 步骤:

1、创建容器并挂载数据卷到容器内的HTML目录

docker run --name nginx1 -v html:/usr/share/nginx/html -p 8080:80 -d nginx

2、进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置 docker volume inspect html # 进入该目录 cd /var/lib/docker/volumes/html/_data # 修改文件 vim index.html

数据卷挂载方式:

-v volumeName: /targetContainerPath

如果容器运行时volume不存在,会自动被创建出来

9. Dockerfile自定义镜像

步骤4:上传Dockerfile到docker-demo目录,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

步骤5:进入docker-demo目录下步骤6:运行命令:

docker build -t javaweb:1.0 .

-t:表示 tag,镜像的名称由两部分组成:repository:tag,如:javaweb:1.0 . :表示 dockerfile 所在的目录

启动项目:

docker run --name web -p 8090:8090 -d javaweb:1.0

如果要运行多个 jar 包,上述构建项目的命令好多都是重复的,大部分名称都是在安装jdk的环境等 虽然可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,都可以在一些安装了部分软件的基础镜像上做改造。 例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。 下面就介绍下直接在搭建好的java环境镜像中进行操作

2、基于java:8-alpine镜像,将一个Java项目构建为镜像

新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile 上传所需的 docker-demo.jar 到目录中 编写Dockerfile文件: 基于java:8-alpine作为基础镜像 将app.jar拷贝到镜像中 暴露端口 编写入口ENTRYPOINT,内容如下:

# 指定基础镜像 FROM java:8-alpine # 配置环境变量,JDK的安装目录 ENV JAVA_DIR=/usr/local COPY ./docker-demo.jar /tmp/app.jar # 暴露端口 EXPOSE 8090 # 入口,java项目的启动命令 ENTRYPOINT java -jar /tmp/app.jar

使用docker build命令构建镜像

docker build -t javaweb:2.0 .

使用docker run创建容器并运行

docker run --name web1 -p 8091:8091 -d javaweb:2.0

小结: Dockerfile的本质是一个文件,通过指令描述镜像的构建过程 Dockerfile的第一行必须是FROM,从一个基础镜像来构建 基础镜像可以是基本操作系统,如:Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

11. Docker-Component

Docker Compose可以基于Compose文件快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。

version: "3.8" services: mysql: image: mysql:5.7.25 environment: MYSQL_ROOT_PASSWORD: 123 volumes: - "/tmp/mysql/data:/var/lib/mysql" - "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf" web: build: . ports: - "8090:8090"

上面的Compose文件就描述一个项目,其中包含两个容器:1、mysql:一个基于mysql:5.7.25镜像构建的容器,并且挂载了两个目录2、 web:一个基于docker build临时构建的镜像容器,映射端口时8090 DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/ 其实DockerCompose文件可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。 DockerCompose的作用:快速部署分布式应用,无需一个个微服务去构建镜像和部署。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C99中用于微控制器的一组实用程序
下一篇:聊聊Mybatis的数据源之PooledDataSource(二)
相关文章