目录
Docker安装
linux环境下安装
阿里云镜像加速
Docker基础使用
Docker安装tomcat与运行删除
Docker常用命令
Docker宿主机与容器通信
Dockerfile基础指令
FROM-基于基准镜像
LABEL & MAINTAINER - 说明信息
WORKDIR - 设置工作目录
ADD & COPY - 复制文件
ENV - 设置环境常量
EXPOSE - 暴露容器端口
Dockerfile执行指令
RUN-构建时运行
Shell运行方式
Exec运行方式
ENTRYPOINT启动命令
CMD默认命令
通过Dockerfile构建Redis镜像
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,点击第一个,可以查看各个版本
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 pull 镜像名<:tags>-从远程仓库抽取镜像
可以有版本号 例如 docker pull tomcat:7 拉取tomcat7
如果不写版本号,默认是最新的版本
docker images - 查看本地镜像
docker run 镜像名<:tags> - 创建容器,启动应用
如果本地没有镜像,会先进行pull到本地
docker ps - 查看正在运行中的镜像
docker rm <-f> 容器id - 删除容器
-f表示强制参数
docker rmi-<-f> 镜像名:
-f表示强制参数
132装的物理机,里面的tomcat容器端口8080,不能通过192.168.163.132:8080进行访问,需要进行端口映射,8000和8080进行映射,这样,192.168.163.132:8000即可访问,会转发给容器内部的8080端口。用户只需要知道对外暴露的端口,而且这样以后还可以改变容器内部的端口号,或者从tomcat改成其他服务,只需要对外提供的端口一样即可。
FROM centos #制作基准镜像(基于centos:lastest)
FROM scratch #不依赖任何基准镜像base image
FROM tomcat: 9.0.22-jdk8-openjdk
尽量使用官方提供的Base Image
MAINTAINER mashibing.com
有哪个机构维护
LABEL version = "1.0"
对文件进行描述,没有真实的意义,类似于注释
LABEL description = "无龙"
WORKDIR /usr/local
WORKDIR /usr/local/newdir #会自动创建文件夹
尽量使用绝对路径
两个指令基本一样,可以替换
ADD hello / #复制到根路径
ADD test.tar.gz / #添加根目录并解压
ADD 除了复制,还具备添加远程文件功能
ENV JAVA_HOME /usr/local/openjdk8
类似于装jdk时,要设置java_home环境常量,然后可以使用${xxx}进行替换对应的值
RUN ${JAVA_HOME}/bin/java -jar test.jar
尽量使用环境常量,可提高程序维护性
将容器内部端口暴露给物理机
EXPOSE 8080
docker run -p 8000:8080 tomcat
RUN & CMD & ENTRYPOINT
RUN : 在Build构建时执行命令
在创建镜像时,对镜像内部的文件或者资源执行命令,镜像创建完后,镜像就是只读的
这两个都是容器创建时,对容器执行的命令
ENTRYPOINT : 容器启动时执行的命令
CMD : 容器启动后执行默认的命令或参数
不同的执行时机
RUN yum install -y vim #Shell 命令格式
正常的linux语句
RUN ["yum","install","-y","vim"] #Exec命令格式
具体和上面一样,但是最外面是中括号,里面是双引号和逗号
使用Shell执行时,当前shell是父进程,生成一个子shell进程
在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。
使用Exec方式,会用Exec进程替换当前进程,并且保持PID不变
执行完毕,直接退出,并不会退回之前的进程环境
如果不清楚,推荐使用exec方式
ENTRYPOINT(入口点)用于在容器启动时执行命令
Dockerfile中只有最后一个ENTRYPOINT会被执行
ENTRYPOINT ["ps"] #推荐使用Exec格式
CMD用于设置默认执行的命令
如Dockerfile中出现多个CMD,则只有最后一个被执行
如容器启动时附加指令,则CMD被忽略(不一定被执行)
CMD ["ps" , "-ef"] #推荐使用Exec格式
cmd和entrypoint如果单独使用,没有啥区别,只是根据容器启动附加指令,判断是否执行。
但是2者可以组合使用,先输入entrypoint,再输入cmd,cmd可以作为前者的参数。同时,由于cmd可以被外来的指令覆盖,这样就可以修改这个参数,更加灵活
首先需要redis的压缩包和对应的配置文件
然后将2个文件放入docker的image目录下的docker-redis目录里面,然后里面再创建一个dockerfile文件
dockerfile里面,先基于centos,然后安装redis需要的配置软件,一些编译和网络程序
切换到local目录,将压缩包解压到里面
再进入到解压完的源代码目录,对源代码使用gcc进行编译和安装
切换到redis目录,将配置文件复制到里面
暴露7000端口
最后容器启动时,利用redis-server这个可执行文件,根据redis-7000这个配置文件,运行server端
根据dockerfile生成镜像
docker run即可启动容器