Docker学习:docker基本概念及操作指导

发布时间 2023-08-04 00:54:42作者: mini小新

Docker学习:docker基本概念及操作指导

1、概念

Docker是一个进程,一启动就两个进程,一个服务,一个守护进程。占用资源就非常少,启动速度非常快,1s。

docker内含三大组件:仓库、镜像、容器

仓库(Docker Registy):存放docker运行的镜像文件,类似于maven仓库。通常是通过<镜像名>:<标签>的格式来指定是哪个版本的镜像。

镜像(Images):docker镜像,一个能够运行在docker容器上的一组程序文件。它提供了容器运行时所需的程序、库、资源、配置等文件,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),是一个完整的root文件系统。

容器(Container):容器,就是运行程序的载体。镜像( Image )和容器( Container )的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

image

2、Linux安装过程

Tips:安装过程基于centos7.9

Docker安装要求:在liunx上安装Docker,要求操作系统是64位操作系统。并且内核版本需要3.10以上

查看内核版本

cat /proc/version

image

1、执行安装命令

# 执行以下命令之一执行安装
yum install docker
# 免确认执行
yum -y install docker

image

出现complete即安装成功。

image

2、检查docker版本

# 检查命令
docker version
docker -v

出现版本号,表明已正确的安装成功。

image

image

3、查看基本信息

docker info

image

4、校验

# 以管理员身份执行
docker run helo-world

image

5、查看帮助信息

# 查看docker的帮助文档
docker --help
docker COMMAND --help
# 查看docker子命令的操作帮助文档
docker build --help

image

image

3、基本操作

1、启动docker

# 启动命令
service docker start
# 启动命令2
systemctl start docker

正常执行结束如下:

image

# 查看服务运行状态
# 方式一
service docker status 
# 方式2
systemctl status docker

看到running,服务即正常启动。

image

2、上传jar包到服务器

打包项目文件,可将其上传到任意路径。

cd /usr/local/src/
# 建立专用的目录
mkdir docerPac
# 移动到该目录
cd docerPac/

image

3、创建Dockerfile

Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

注意:创建的Dockerfile需要与jar包在同一级目录下!

# 同级目录创建Dockerfile
cd /usr/local/src/docerPac ; touch Dockerfile

image

配置内容:

FROM java:8
VOLUME /tmp
ADD sparkProject-1.0.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9083
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

Dockerfile说明:

FROM :表示使用哪个基础镜像去构建新的镜像。上面的java:8,版本号是8也就是jdk1.8

VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

ADD :表示叠加什么镜像到上面的基础镜像中。我们现在就叠加当前目录下的 sparkProject-1.0.jar 到基础镜像中。需要两个执行参数。

EXPOSE:表示对外暴露的端口,我使用的是9083

RUN bash -c ‘touch /app.jar’ :使用 shell编程,执行一个 touch 命令,更新文件的访问和修改时间 -c 如果文件不存在,则不要进行创建。具体参考liunx 的 touch 命令和shell编程。

ENTRYPOINT :入口点, 表示容器运行后默认执行的命令。

image

4、拉取基础镜像

将基础镜像拉取到本地

docker pull java:8

拉取成功后效果如下:

image

5、构建程序镜像

# 镜像名称任意,注意后面有一个点
docker build -t spark-test .

构建成功如下:

image

6、删除镜像

镜像删除使用 docker rmi 命令,比如我们删除 hello-world 镜像:

docker rmi hello-world

7、查看本地仓库

镜像构建成功后,可以使用以下命令查看本地仓库内容

# 查看本地仓库镜像
docker images

可以看到仓库中包含构建的镜像:

image

8、创建容器并运行

1、运行方式一

镜像文件有了之后,还需要创建一个基于镜像的容器,以此来运行项目。

镜像和容器的关系:

镜像可以理解为一个Java类,而容器可以理解为Java类的实例。
类只有一个,但可以new出千千万万个实例对象。
所以,镜像只是一个可以生成容器的东西,而容器才能让程序运行起来。

# 创建并运行一个容器
# docker run --name 容器名(可任意) -d -p 内部端口:外部端口 镜像名
docker run --name test1 -d -p 9083:9083 spark-test

执行结果如下,结果为

image

命令说明

容器名:我这里取的名字为spark-test

-d: 后台运行容器,并且返回容器完整ID

-p: 是用于指定端口的。

内部端口:项目程序的端口

外部端口:网站域名的端口

2、运行方式二

# 以下方式需要容器为已存在
# 运行容器
docker start test1
# 62847714cf2d为spark-test容器id
docker start 62847714cf2d

image

image

9、查看docker容器

# 查所有运行的容器信息
docker ps -a

image

10、停止容器

# test1为容器名
docker stop test1
# 62847714cf2d为容器id
docker stop 62847714cf2d 

image

image

11、进入容器内部

两种方式:

  • docker attach:此方式需使用Ctrl + p退出,否则容器也一并停止。

  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

# 155c21c7e566为容器id
docker attach 155c21c7e566
# 推荐使用
docker exec -it 155c21c7e566 /bin/bash

小知识补充:

如何将来容器里面的java项目的日志,输出到容器的指定位置以文件形式保存起来呢。首先我们通过docker exec -it <容器ID> /bin/bash进入下容器的内部时。文件系统结构是这样子的,如下图:
image

默认路径就是上面的路径,如果我们要把日志输出到/home/web/logs里面,那么我们就得在java工程logback.xml里面配置好指定路径。如下:

image

12、退出容器到宿主机

注意:不能使用exit命令,或者Ctrl + c,这两种方式会将容器进程杀死。正确的退出方式为Ctrl + p组合键

4、docker安装产品的方式

docker安装其他的产品有两种方式

方式一:通过拉取事先做好的镜像,例如下面redis的安装方式
方式二:通过Dockerfile来构建新的镜像,例如下面tomcat的安装方式

组成结构:bash-4.1# 表示进入docker容器内部

image

docker之后会自动给docker容器配置一个vip虚拟ip地址。

如上为基础指导,欢迎大家留言收藏,如有问题欢迎指正,若对你有帮助,动动你的小手,点个赞哟~~~~~