Docker的使用

1. docker的组成部分

docker镜像,docker容器  --->docker容器是基于docker镜像的

2. docker的安装步骤:直接在linux的根目录下(cd /),不需要创建文件夹   如果需要查看docker的安装路径:cd /var/lib/docker

1)# 1、查看centos版本 要求64位centos版本在6.5及以上,内核版本2.6.32 ‐431及以上版本

# uname ‐ r

补充:如果不是大于3.10版本,使用:sudo yum update(选作)   将yum包更新到最新版本  在更新的时候可能会遇到关不掉的情况,那么我们可以强制的关掉,使用:rm -f /var/run/yum .pid(强制关掉yum进程)

2)作用: 安装需要的软件包 yum-util 提供yum-config-manager功能

sudo yum install - y yum- utils device- mapper- persistent- data lvm2

3)出现输入的界面都按 y

yum install docker

4)查看docker版本

docker -v

3. 设置镜像加速,因为docker是从远程仓库拉取的

登录阿里云,选择控制台,找到容器与中间键

 

4)打开配置文件,然后将我们复制的内容粘贴进去

# v i m / e t c / d o c k e r / d a e m o n . j s o n

 

3. Docker的启动与停止命令

1)启动docker服务

systemctl start docker

2) 停止docker服务

systemctl stop docker 

3) 重启docker服务

systemctl restart docker 

4)查看docker状态systemctl status docker

5 )设置开机启动docker服务:

systemctl enable docker

4. Docker的常用命令

Docker镜像相关命令:

查看镜像------docker images

搜索镜像------docker search tomcat(镜像名)

拉取镜像------docker pull tomcat(镜像名称)

  我们也可以拉取指定版本的镜像:docker pull centos:7

删除镜像------docker rmi tomcat(镜像id)

  可以先通过docker images查看所有镜像,找到需要删除的镜像id进行删除

Docker容器的相关命令:

查看容器:

  查看正在运行的容器:docker ps

  查看所有容器:docker ps -a

创建并启动容器:

可以基于已有的镜像来创建和启动容器 ,创建与启动容器使用命令:docker run

参数说明:

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后 ,容器创建就能登录进去。即分配一个伪终 端。

--name :为创建的容器命名。

-v :表示目录映射关系 (前者是宿主机目录 ,后者是映射到宿主机上的目录) ,可以使用多个-v做 多个目录或文件映射。注意:最好做目录映射 ,在宿主机上做修改 ,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行 (这样创建容器后不会自动登录容器 ,如果只加-i -t 两个参数 ,创建后就会自动进去容器) 。

-p :表示端口映射 ,前者是宿主机端口 ,后者是容器内的映射端口。可以使用多个-p做多个端口映射

1)交互式容器:以交互式方式创建并启动容器 ,启动完成后 ,直接进入当前容器 。使用exit命令退出容器 。需要注意的是以此种方式 启动容器 ,如果退出容器 ,则容器会进入停止状态。

创建并启动名称为 mycentos7 的交互式容器; 下面指令中的镜像名称 centos:7 也可以使用镜像id

docker run -it --name=mycentos7 centos:7

退出容器:exit

2)守护式容器:

创 建 一 个守护式容器; 如果对于一个需要长期运行的容器来说 , 我们可以创建一个守护 式容器 。 命令如下(容器名称 不 能 重 复 )

#创建并启动守护式容器

docker run -di --name=mycentos2 centos:7

# 登 录进入容器命令为: docker exec -it container_name (或者 container_id)/bin/bash (exit推出时,容器不会停止)

docker exec - it mycentos2 /bin/bash

退出:exit

启动容器:docker start  centos7(可以使用容器名称或者id)

停止容器:docker stop d88b51fb31ea(可以使用容器名称或者id)

查看容器ip:docker ps

删除容器:docker rm d88b51fb31ea(容器id:删除容器的时候需要将容器先停止掉)

查看容器的ip地址:docker inspect centos7

5. Docker应用部署

1)mysql部署:

拉取mysql5.7镜像:

docker pull centos/mysql-57-centos7

创建容器:

docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 centos/mysql-57 -centos7

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 -e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的远程登陆密码(如果是在容器中使用 root登录的话, 那么其密码为空)

操作mysql容器:

# 进入到mysql容器中

docker exec -it mysql5.7 /bin/bash

# 登录容器里面的mysql:这个时候会让你输入密码,是不需要输入的,因为我们是在容器里面输入的,如果时远程登录,比如使用我们的navicate登录的话,就需要输入密码了

mysql -u root -p

#退出mysql容器

需要输入两次:exit    (第一次是推出mysql,第二次是退出mysql容器)

远程连接我们的mysql容器:如果出现连接不上的情况,检查一下防火墙,或者我们的端口号是否放过

 

2)nginx的部署

# 拉取nginx镜像

docker pull nginx

# 创建nginx容器 

docker run -di --name=mynginx -p 80:80 nginx

启动后在宿主机上访问: http://宿主机IP/

3)Dockerfile文件

上面我们已经知道了,要获得镜像,可以从Docker仓库中进行下载。那如果我们 想自己开发一个镜像,那该如 何做呢?答案是:Dockerfile

Dockerfile常用命令:

 

使用Dockerfile创建镜像

1)在一个空白目录中 ,建立一个文本文件 ,并命名为 Dockerfile: (首字母必须要大写,且名字必须是Dockerfile) Dockerfile 文件用来说明如何来构建镜像

# mkdir mynginx 

# cd mynginx

# touch Dockerfile

其内容为:

FROM nginx

RUN echo '<h1>Hello,Docker!</h1>' > /usr/share/nginx/html/index.html

 

 

这个 Dockerfile 很简单 ,一共就两行。涉及到了两条指令 ,FROM 和 RUN。 :

FROM 指基础镜像

 

所谓定制镜像,那一定是以一个镜像为基础 ,在其上进行定制。

就像我们之前运行 了一个nginx 镜像的容器 ,再进行修改一样 ,基础镜像是必须指定的。而 FROM 就是 指定基础镜像 ,因此一个 Dockerfile中 FROM 是必备的指令 ,并且必须是第一条指令。

如果你以 scratch 为基础镜像的话,意味着你不以任何镜像为基础

接下来所写的指令将作为镜像第一层开始存在。

# FROM scratch

# ...

RUN 指令是用来执行命令行命令的;

Dockerfile 中每一个指令都会建立一层 , RUN 也不例外。每一个 RUN 的行为 , 就是新建 立一层 ,在其上执行这些命令 ,执行结束后 ,commit 这一层的修改 ,构成 新的镜像。

注意:不要写多个 RUN,那样产生非常臃肿、非常多层的镜像 ,不仅仅增加了构建部署的 时间也很用易出错

 

Dockerfile 正确的写法: (案例:编译、安装 redis 可执行文件) 多个run中间是使用&号进行连接的

FROM debian:jessie
RUN buildDeps='gcc libc6 ‐dev make' \
&& apt ‐get update \
&& apt ‐get install ‐y $buildDeps \
&& wget ‐O redis.tar.gz "http://download.redis.io/releases/redis
‐3.2.5.t
ar.gz" \
&& mkdir ‐p /usr/src/redis \
&& tar ‐xzf redis.tar.gz ‐C /usr/src/redis ‐‐strip
‐components=1 \ 9 && make ‐C /usr/src/redis \
&& make ‐C /usr/src/redis install \
&& rm ‐rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm ‐r /usr/src/redis \
&& apt ‐get purge ‐y ‐‐auto 

最后添加了清理工作的命令 ,删除了为了编译构建所需要的软件 ,清理了所有下载、展开 的 文件 ,并且还清理了apt 缓存文件。

这是很重要的一步 ,我们之前说过 ,镜像是多层存 储, 每一层的东西并不会在下一层被删除 ,会一直跟随着镜像。 因此镜像构建时 ,一定要 确保每 一层只添加真正需要添加的东西 ,任何无关的东西都应该清理掉。  

(类似盖完楼,拆除脚手架)

回到之前定制的 nginx 镜像的 Dockerfile 来。现在我们明白了这个 Dockerfile 的 内容 ,那么让我们来构建这个镜像。 我们使用了 docker build 命令进行镜像构建。其格式为:

 

 

2)基于镜像创建容器

在这里我们指定了最终镜像的名称 ­t nginx :v1 ,构建成功后,就可以运行这个镜像。 查看镜像信息

docker images

 

启动镜像

docker run -id --name=mynginx2 -p 81:80 mynginx:v1

 

浏览器进行访问:http://192.168.220.130/:81/   注意:开放81端口,否则浏览器无法访问

 

3)部署springboot项目

将我们需要部署到容器中的项目打包:需要先确保本地运行没有问题再去部署

 

然后进行我们linux系统中,创建docker目录,再在当前目录下创建一个mytest文件夹,进入mytest文件夹下,创建Dockerfile文件(注意:Dockerfile文件一定要和我们的boot项目压缩包处于同一级目录下)

在mytest下,上传我们的boot项目jar包

 

 

 

然后vim Dockerfile,然后将下面内容复制进去:

FROM openjdk:8-jdk-alpine

VOLUME /tmp

ADD springboot_docker-1.0-SNAPSHOT.jar app.jar

ENTRYPOINT ["java","-jar","/app.jar"]

 

这个 Dockerfile 文件很简单,构建 Jdk 基础环境,添加 Spring Boot Jar 到镜像中,

简单解释一下:FROM ,表示使用 Jdk8 环境为基础镜 像,如果镜像不是本地的会从 DockerHub 进行下载 VOLUME ,

VOLUME 指向了一个/tmp 的目录,由于 Spring Boot 使用内置的 Tomcat 容器,Tomcat 默认使用/tmp 作为工作目录。

这 个命令 的效果是:在宿主机的/var/lib/docker 目录下创建一个临时文 件并把它链 接到容器中的/tmp 目录 ADD ,拷贝文件并且重命名

必须在项目所在目录下执行此命令:

# docker build ‐t mytest:v1 .

注: mytest:自定义的镜像名,全部小写 v1:自定义版本号,不写默认为最新版本

看到如下信息,证明执行成功了:

 在运行之前,我们需要修改下述信息:

 然后创建容器:

docker run -idt --name=test -p 8081:8080 mytest:v1

查看正在运行的容器:

docker ps

访问:http://宿主机 ip:端口号

如果我们的boot项目是需要连接数据库的话,那么我们需要在项目中修改下连接数据库信息:

 4)使用idea连接远程docker

4.1 配置docker远程连接端口

vim /usr/lib/systemd/system/docker.service

找到 ExecStart,在最后面添加-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ,如下图所示

4.2 开放端口:(防火墙关闭忽略) 

firewall‐cmd ‐‐zone=public ‐‐add‐port=2375/tcp ‐‐permanent

刷新防火墙状态

firewall‐cmd ‐‐reload

查看开放的端口号

firewall‐cmd ‐‐list‐ports

4.3 重启docker

systemctl start docker

systemctl daemon‐reload

重新启动 Docker 后台服务: 4 # service docker restart

4.4 IDEA安装插件 重启

在idea中安装docker插件,然后重启idea

 4.5 idea远程连接docker

我们依次打开 File->Settings->Build,Execution,Deployment->Docker ,然后配置一下 Docker 的远程连接地址:tcp://192.168.145.128:2375

 配置一下 Docker 的地址,配置完成后,可以看到下面有一个 Connection successful 提 示,这个表示 Docker 已经连接上了。 如此之后,我们的准备工作就算是 OK 了。

4.6 在项目中添加插件

<plugins>
 <!--镜像启动插件-->
 <plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
 </plugin>
 <!--配置部署到远程docker中-->
 <!--一键部署-->
 <plugin>
 <!--启动插件-->
 <groupId>com.spotify</groupId>
 <artifactId>docker-maven-plugin</artifactId>
 <version>1.0.0</version>
 <configuration>
 <!--指定生成的镜像名-->
 <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
 <!--指定标签-->
 <imageTags>
 <imageTag>latest</imageTag>
 </imageTags>
 <!--基础镜像-->
 <baseImage>java:8</baseImage>
2、在src/main目录下创建docker目录,并创建Dockerfile文件
1 FROM openjdk:8‐jdk‐alpine
2 ADD *.jar app.jar
3 ENTRYPOINT ["java","‐Djava.security.egd=file:/dev/./urandom","‐jar","/ap
p.jar"]
 <!--作者信息-->
 <maintainer>wangbohao</maintainer>
 <!--切换到/ROOT目录-->
 <workdir>/ROOT</workdir>
 <cmd>["java","-version"]</cmd>
 <entryPoint>["java","-jar","${project.build.finalName}.jar"]</entryPoint>
 <!--指定远程 docker api地址-->
 <dockerHost>http://192.168.220.130:2375</dockerHost>
 <resources>
 <resource>
 <targetPath>/ROOT</targetPath>
 <!--用于指定需要复制的跟目录 此处配置的${project.build.directory}是 即对应 target 目录-->
 <directory>${project.build.directory}</directory>
 <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
 <include>${project.build.finalName}.jar</include>
 </resource>
 </resources>
 </configuration>
 </plugin>
 </plugins>

在src/main目录下创建docker目录,并创建Dockerfile文件

 然后再Dockerfile文件中添加如下信息

FROM openjdk:8-jdk-alpine
ADD *.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

 然后点击:

 

 

 

  

 

 然后maven打包:

 最后运行:

 然后浏览器访问:

 

posted @ 2023-05-28 17:56  LBC_0612  阅读(44)  评论(0编辑  收藏  举报