Docker基础学习

一、Docker安装

1.安装

#设置yum源
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
#安装docker-ce
yum -y install docker-ce

2.启动/停止

docker version #查看版本
systemctl start docker #启动
systemctl stop docker #停止
systemctl status docker #查看状态
systemctl restart docker #重启
systemctl enable docker #设置开机自启动
#验证
docker run hello-world #下载hello-world并运行

二、配置Docker镜像加速器

vi /etc/docker/daemon.json
    {
      "registry-mirrors": ["前往自己的阿里云镜像仓库查看"]
    }
sudo systemctl daemon-reload
sudo systemctl restart docker 

三、Docker操作

输入docker可以查看Docker的命令用法,输入docker COMMAN --help查看指定命令详细用法

1.镜像操作

#查找:可以在Docker Hub网站查看镜像的详细信息,如镜像的tag标签
docker search 关键字
#抽取:tag表示软件的版本,如果不指定默认是latest
docker pull 镜像名:tag
#列表:查看本地镜像
docker images
#获取源信息:获取镜像的源信息,详细信息
docker inspect 镜像id
#删除:删除指定的本地镜像,-f表示强制删除
docker rmi -f 镜像id或镜像名:tag

2.容器操作

#运行:--name指定容器名,名称自定义,如果不指定会自动命名;-i以交互模式运行;-t分配一个伪终端,即命令行;-p指定端口映射;-d表示后他运行,即守护式运行容器;-v指定挂载主机目录到容器目录,ro表示只读
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像id或镜像名称:tag
#列表:查看正在运行的容器,-a表示显示所有容器
docker ps -a
#启动:启动容器
docker start 容器id或容器名称
#停止:停止正在运行的容器
docker stop 容器id或容器名称
#删除:删除容器,-f表示强制删除
docker rm -f 容器id或容器名称
#日志:获取容器的日志
docker logs 容器id或容器名称
#在容器中执行:进入正在运行的容器并开启一个交互模式,可以在容器中执行操作
docker exec -it 容器id或容器名称 /bin/bash
#拷贝文件:将主机中的文件拷贝到容器中;将容器中的文件拷贝到主机中
docker cp 主机中的文件路径 容器id或容器名称:容器路径;docker cp 容器id或容器名称:容器路径 主机路径
#获取元信息:获取容器的元信息
docker inspect 容器id
以Centos为例
docker search centos
docker pull centos
docker run --name mycentos -it centos:latest #根据镜像运行容器,并以交互模式进入容器
#实际上是在Docker容器中运行一个精简版的Centos系统
exit #退出并关闭容器
docker ps -a
docker start mycentos
docker stop mycentos
docker rm mycentos
docker rm -f ${docker ps -qa} #强制删除所有容器
以tomcat为例
# 示例1:基本用法
docker search tomcat
docker pull tomcat
docker run --name mytomcat -p 8888:8080 -d tomcat
# 测试:http://宿主机地址:8888
docker stop mytomcat
docker ps -a
docker start mytomcat 

#示例2:拷贝文件和挂载目录
docker run -p 8080:8080 -d tomcat
docker exec -it 容器id或容器名称 /bin/bash
cd /usr/local/tomcat/webapps/ROOT
exit
echo welcome to tomcat > index.jsp
docker cp index.jsp 容器id或容器名称:/usr/local/tomcat/webapps/ROOT

# 部署web项目,将war文件放到容器中
docker cp war文件 容器id或容器名称:/usr/local/tomcat/webapps

#问题:如果项目更改了需要重新拷贝war文件,太麻烦,可以直接挂载目录(也称为数据卷Volume)
docker run \
-p 8080:8080 \
-v /my/tomcat/webapps/spring-web.war:/usr/local/tomcat/webapps/spring-web.war \
-v /my/tomcat/data:/usr/local/tomcat/dataVolume:ro \
-d tomcat

#示例3:启动多个容器,一个镜像可以启动多个容器,互相隔离、独立
docker run -p 8080:8080 -d tomcat
docker run -p 8081:8080 -d tomcat
docker run -p 8082:8080 -d tomcat

3.镜像的分层结构

tomcat镜像为什么这么大?

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的软件,包含运行某个软件所需的所有内容

基于UnionFS联合文件系统,采用分层结构,一层一层的堆叠起来,像一个同心圆,但从外面来说,只能看到最外层的文件系统(镜像层)

分层结构:共享资源,便于复用(许多镜像都是从相同的Base基础镜像构建而来的,基础镜像只需要保存一份)

镜像都是只读的,而由镜像生成的容器是可修改的

4.创建镜像

有时从Docker镜像仓库中下载的镜像不能满足我们的要求,此时可以基于这个镜像(基础镜像)封装一个自己的镜像
两种方式:
	更新镜像:使用docker commit命令
	构建镜像:使用docker build命令,需要创建Dockerfile文件
4.1 更新镜像

先使用基础镜像创建一个容器,然后对容器进行修改,最后使用commit命令提交为一个新的镜像
步骤:

1.根据基础镜像,创建容器
docker run --name mytomcat -p 8080:8080 -d tomcat
2.修改容器
docker exec -it 容器id /bin/bash
cd webapps/ROOT
rm -f index.jsp
echo welcome to tomcat > index.html
exit
3.提交为新镜像,语法:docker commit -m="描述信息" -a="作者" 容器id或容器名 镜像名:tag
docker commit -m="修改默认索引页" -a="cax" 容器id或容器名 cax/tomcat:v1
4.使用新镜像运行容器
docker run --name tomcat_v1 -p 8080:8080 -d cax/tomcat:v1
4.2构建镜像

Dockerfile是一个包含创建镜像所有命令的文本文件,使用docker build命令可以根据Dockerfile的内容创建镜像
步骤:

1.创建一个Dockerfile文件 vi Dockerfile

#基础镜像
FROM tomcat

#作者
MAINTAINER 704738439@qq.com

#执行命令
RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp
RUN echo "welcome to tomcat" > /usr/local/tomcat/webapps/ROOT/index.html
2.构建新镜像,语法:docker build -f Dockerfile文件路径 -t 镜像名:tag 命令执行的上下文
docker build -f Dockerfile -t cax/tomcat:v2
3.使用新镜像运行容器
docker run -p 9999:8080 -d cax/tomcat:v2

5. Dockerfile详解

5.1 简介
Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本
Dockerfile从FROM命令开始,紧接着各种命令、参数等,最终会生成一个新的镜像
使用Dockerfile构建镜像的步骤
1.编写Dockerfile文件
2.使用docker build构建镜像
3.使用docker run运行容器
5.2 用法
语法规则
	指令必须要大写,且后面必须跟参数
	第一条指令必须是FROM,指定基础镜像
	指令按从上往下的顺序,依次执行
	每条指令都会创建一个新的镜像层并提交
	#表示注释
5.3 常用命令
FROM    #指定基础镜像,即当前新镜像是基于哪个镜像的
MAINTAINER #指定作者
RUN #指定构建过程中要运行的命令
ENV #设置环境变量
WORKDIR #指定默认的工作目录,即进入容器后默认进入的目录
VOLUME #创建挂载点,也称容器数据卷,用于数据共享和持久化
CMD #指定容器启动时要运行的命令,与RUN不同的是,这些命令不是在镜像构建过程中执行的
ENTRYPOINT #指定容器启动时要运行的命令
COPY #拷贝文件/目录到镜像中
ADD #拷贝文件到镜像中,且会自动解压
EXPOSE #指定对外暴露的接口
5.4案例
5.4.1 自定义Centos镜像
#1.编写Dockerfile文件
vi Dockerfile2
    FROM centos
    MAINTAINER 704738439@qq.com
    ENV MYPATH /usr/local/centos
    RUN mkdir -p $MYPATH
    WORKDIR $MYPATH
    RUN yum -y install vim
    RUN yum -y install wget
   #创建挂载点,无法指定宿主机上对应的目录,是自动生成的
   VOLUME ["/data1","/data2"]
   CMD ["/bin/bash"]

#2.使用docker build构建镜像
docker build -f Dockerfile2 -t cax/centos:v1
#3.使用docker run运行容器
docker run -it 镜像id
#查看镜像的变更历史
docker history 镜像id  
5.4.2 CMD和ENTRYPOINT的区别

CMD
在Dockerfile中可以有多个CMD指令,但只有最后一条指令生效,所以一般只有一条CMD指令,CMD指令在被docker run之后的参数覆盖

vi aaa
    FROM centos
    CMD ["/bin/ls"]
    CMD ["/bin/bash"]
docker build -f aaa -t cax/aaa .
docker run -it cax/aaa
docker run -it cax/aaa /bin/pwd

ENTRYPOINT
docker run之后的参数会被作为ENTRYPOINT指令的选项,组合成新命令

vi bbb
    FROM centos
    ENTRYPOINT ["/bin/ls","/usr/local"]
docker build -f bbb -t cax/bbb .
docker run -it cax/bbb
docker run -it cax/aaa -l  #ls /usr/local -l 
5.4.3 自定义tomcat镜像
#1.编写Dockerfile文件
vi Dockerfile
    FROM centos
    MAINTAINER 704738439@qq.com
    
    #拷贝文件,文件必须和Dockerfile文件一致
    COPY 某个文件 /usr/local
    ADD jdk-8u171-linux-x64.tar.gz /usr/local
    ADD apache-tomcat-8.5.30.tar.gz /usr/local
   
   #配置环境变量
   ENV JAVA_HOME /usr/local/jdk1.8.0_171
   ENV CLASSPATH .:$JAVA_HOME/lib
   ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.30
   ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
   
   WORKDIR $CATALINA_HOME
   
   EXPOSE 8080
   
   CMD ["catalina.sh","run"]
   
#2.使用docker build构建镜像
docker build -t cax/tomcat:v1

#3.使用docker run运行容器
docker run \
--name mytomcat \
-p 8080:8080 \
-v 宿主机挂载的目录:容器挂载的目录 \
-d cax/tomcat:v1   
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值