> 文章列表 > Docker使用总结

Docker使用总结

Docker使用总结

目录

Docker安装

linux环境下安装

阿里云镜像加速

Docker基础使用 

Docker安装tomcat与运行删除

Docker常用命令

Docker宿主机与容器通信

Dockerfile基础指令

FROM-基于基准镜像

LABEL & MAINTAINER - 说明信息

WORKDIR - 设置工作目录

ADD & COPY - 复制文件

ENV - 设置环境常量

EXPOSE - 暴露容器端口

Dockerfile执行指令

RUN-构建时运行

Shell运行方式

Exec运行方式

ENTRYPOINT启动命令

CMD默认命令

通过Dockerfile构建Redis镜像 


Docker安装

linux环境下安装

Install Docker Desktop on Linux

Install Docker Desktop on Ubuntu

centos环境下安装

yum install -y yum-utils device-mapper=persistent-data lvm2
安装docker数据存储所需的软件,docker安装的工具包

yum-config-manager --add-repo http://mirrors.aliyum.com/docker-ce/linux/centos/docker-ce.repo
为yum安装源选择新的仓库,国外的太慢了,注意ce是开源版本的docker

yum makercache fase
让yum查看哪个安装源速度最快

yum -y install docker-ce
安装开源的docker

service docker start
启动docker

docker version
查看docker版本,能够看到是否安装成功,注意,里面会有docker客户端和服务端的信息,都安装了,默认客户端直连本机的服务端

docker pull hello-world
从国外的镜像仓库,拉取hello-world镜像(如果很慢,可以使用阿里云的加速代理)

docker run hello-world
运行镜像,看是否出现hello-world

阿里云镜像加速

阿里云-为了无法计算的价值

进入网站,登录后,搜索,容器镜像服务,点击开通

左侧栏里,镜像中心-镜像加速器,有一个加速器地址,每个用户都不同

找到下面对应的操作系统版本,复制代码,到系统执行即可

Docker基础使用 

Docker安装tomcat与运行删除

Docker

这是docker镜像的仓库 

进入后搜索tomcat,点击第一个,可以查看各个版本

 overview这里可以看到,每个版本,对应的其他配置环境

 再下面是如何使用镜像的说明

docker pull tomcat
抽取tomcat最新的版本

docker pull tomcat:8.5.87-jdk8-corretto-al2
或者执行这个,抽取对应的版本

docker images
可以看到本地的镜像,对应的版本和id

docker run tomcat
创建最新版本tomcat的容器,并且启动tomcat,默认是8080端口

crtl+c
退出tomcat,容器会停止

docker run -p 8000:8080 tomcat
启动新的tomcat,并且外部机器的8000映射容器的8080端口

然后外面的chrome浏览器,访问xxx.xxx.xxx.xxx:8000,即可访问,xxx为虚拟机的ip地址

netstat -tulpn
查看虚拟机端口使用情况,可以看到8000,并且对应docker-proxy,代理进行端口的转发

crtl+c
退出,注意:之前的run都是前台运行,不能退出

docker run -p 8000:8080 -d tomcat
-d表示在后台运行tomcat,会返回一个容器编号

docker ps
查看当前运行的容器,可以看到tomcat的容器id,端口映射,最后执行的命令

docker stop xxxxx
xxx为tomcat容器的id,停止tomcat服务

docker rm xxxxx
xxxx为tomcat容器的id,需要容器停止再删除

docker rm -f xxxxx
xxxx为tomcat容器的id,可以不用停止即可删除容器

docker images
查看本机的镜像

docker rmi tomcat:xxxxx
xxx为版本号,删除本机的tomcat镜像,注意需要所有运行的容器都要被删除

docker rmi -f tomcat
强制删除tomcat镜像

Docker常用命令

docker pull 镜像名<:tags>-从远程仓库抽取镜像

可以有版本号  例如 docker pull tomcat:7     拉取tomcat7

如果不写版本号,默认是最新的版本

docker images - 查看本地镜像

docker run 镜像名<:tags> - 创建容器,启动应用

如果本地没有镜像,会先进行pull到本地

docker ps - 查看正在运行中的镜像

docker rm <-f> 容器id - 删除容器

-f表示强制参数

docker rmi-<-f> 镜像名:<tags> - 删除镜像

-f表示强制参数

Docker宿主机与容器通信

132装的物理机,里面的tomcat容器端口8080,不能通过192.168.163.132:8080进行访问,需要进行端口映射,8000和8080进行映射,这样,192.168.163.132:8000即可访问,会转发给容器内部的8080端口。用户只需要知道对外暴露的端口,而且这样以后还可以改变容器内部的端口号,或者从tomcat改成其他服务,只需要对外提供的端口一样即可。

 

Dockerfile基础指令

FROM-基于基准镜像

FROM centos #制作基准镜像(基于centos:lastest)

FROM scratch #不依赖任何基准镜像base image

FROM tomcat: 9.0.22-jdk8-openjdk

尽量使用官方提供的Base Image

LABEL & MAINTAINER - 说明信息

MAINTAINER mashibing.com

有哪个机构维护

LABEL version = "1.0"

对文件进行描述,没有真实的意义,类似于注释

LABEL description = "无龙"

WORKDIR - 设置工作目录

WORKDIR /usr/local

WORKDIR /usr/local/newdir    #会自动创建文件夹

尽量使用绝对路径

ADD & COPY - 复制文件

两个指令基本一样,可以替换

ADD hello / #复制到根路径

ADD test.tar.gz / #添加根目录并解压

ADD 除了复制,还具备添加远程文件功能

ENV - 设置环境常量

ENV JAVA_HOME /usr/local/openjdk8

类似于装jdk时,要设置java_home环境常量,然后可以使用${xxx}进行替换对应的值

RUN ${JAVA_HOME}/bin/java -jar test.jar

尽量使用环境常量,可提高程序维护性
 

EXPOSE - 暴露容器端口

将容器内部端口暴露给物理机

EXPOSE 8080

docker run -p 8000:8080 tomcat

Dockerfile执行指令

RUN & CMD & ENTRYPOINT

RUN  : 在Build构建时执行命令

在创建镜像时,对镜像内部的文件或者资源执行命令,镜像创建完后,镜像就是只读的

这两个都是容器创建时,对容器执行的命令

ENTRYPOINT : 容器启动时执行的命令

CMD : 容器启动后执行默认的命令或参数

不同的执行时机

RUN-构建时运行

RUN yum install -y vim  #Shell 命令格式

正常的linux语句

RUN ["yum","install","-y","vim"] #Exec命令格式

具体和上面一样,但是最外面是中括号,里面是双引号和逗号

Shell运行方式

使用Shell执行时,当前shell是父进程,生成一个子shell进程

在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。

Exec运行方式

使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变

执行完毕,直接退出,并不会退回之前的进程环境

如果不清楚,推荐使用exec方式

ENTRYPOINT启动命令

ENTRYPOINT(入口点)用于在容器启动时执行命令

Dockerfile中只有最后一个ENTRYPOINT会被执行

ENTRYPOINT ["ps"] #推荐使用Exec格式

CMD默认命令

CMD用于设置默认执行的命令

如Dockerfile中出现多个CMD,则只有最后一个被执行

如容器启动时附加指令,则CMD被忽略(不一定被执行)

CMD ["ps" , "-ef"] #推荐使用Exec格式

cmd和entrypoint如果单独使用,没有啥区别,只是根据容器启动附加指令,判断是否执行。

但是2者可以组合使用,先输入entrypoint,再输入cmd,cmd可以作为前者的参数。同时,由于cmd可以被外来的指令覆盖,这样就可以修改这个参数,更加灵活

 

通过Dockerfile构建Redis镜像 

首先需要redis的压缩包和对应的配置文件

然后将2个文件放入docker的image目录下的docker-redis目录里面,然后里面再创建一个dockerfile文件

dockerfile里面,先基于centos,然后安装redis需要的配置软件,一些编译和网络程序

切换到local目录,将压缩包解压到里面

再进入到解压完的源代码目录,对源代码使用gcc进行编译和安装

切换到redis目录,将配置文件复制到里面

暴露7000端口

最后容器启动时,利用redis-server这个可执行文件,根据redis-7000这个配置文件,运行server端

根据dockerfile生成镜像

docker run即可启动容器