JAVA后端《Docker》

1.Docker笔记

#{安装Docker}:yum install docker
#{查看Docker的版本号}:docker -v
#{启动Docker}:service docker start
#{停止Docker}:service docker stop
#{重启Docker}:service docker restart
#{查看Docker状态}:service docker status
#{设置开机启动Docker}:chkconfig docker on
#{查看Docker概要信息}:docker info
#{查看Docker帮助文档}:docker --help

{Docker的基本组成}
    image(镜像) :镜像就是一个可读的模板,可执行的独立软件包。镜像可以用来创建Docker容器,一个镜像可以创建多个容器,Docker镜像是由文件系统叠加而成。
    container(容器):Docker利用容器可以独立运行一个或一组应用。容器是用镜像创建的实例。
    repository(仓库:公开库或私有库):是集中存放镜像文件的场所,需要的时候可以从仓库拉下来,我们也可以把  镜像发布到仓库中。

#{列出Docker下的所有镜像}:docker images
-----------------------------------------------------------------------------------------
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     latest              7bb2586065cd        2 months ago        477 MB
-----------------------------------------------------------------------------------------
{参数说明}
    REPOSITORY:镜像所在仓库的名称
    TAG:镜像标签
    IMAGE ID:镜像的ID值
    CREATED:镜像的创建日期
    SIZE:镜像的大小
#{docker images [options] 的options说明}
    -a:列出本地所有镜像(含中间映射层)
    -q:只显示镜像的ID值
    --digests:显示镜像的摘要信息
    --no-trunc:显示完整的镜像信息
{pull下来的镜像的存储位置}: cd /var/lib/docker/

#{搜索镜像}:docker search [OPTIONS] [镜像名称]
-----------------------------------------------------------------------------------------
[root@localhost docker]# docker search tomcat
INDEX        NAME            DESCRIPTION        STARS          OFFICIAL         AUTOMATED docker.io    docker.io/mysql  MySQL...          9289            [OK]              [OK]
-----------------------------------------------------------------------------------------
{参数说明}
    NAME:仓库名称
    DESCRIPTION:镜像描述
    STARS:用户评价,反应一个镜像的受欢迎程度
    OFFICIAL:是否官方
    AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
{OPTIONS说明}
    --no-trunc : 显示完整的镜像描述
    -s : 列出收藏数不小于指定值的镜像。
    --automated : 只列出 automated build类型的镜像.

#{拉取镜像}: docker pull [镜像名称][:TAG]
   Docker Hub(国外):   https://hub.docker.com
    Dao Cloud(国内):   https://hub.daocloud.io/             
{Docker镜像服务提供者ustc}
   https://lug.ustc.edu.cn/wiki/mirrors/help/docker
{配置镜像服务}  
  1. vi /etc/docker/daemon.json
  2. {"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
  3. service docker restart

#{删除镜像}:
     删除单个: docker rmi -f [镜像ID]
     删除多个: docker rmi -f [镜像名1]:TAG [镜像名2]:TAG 
     删除全部: docker rmi -f $(docker images -qa)

#{查看容器}:docker ps [OPTIONS]
   OPTIONS说明
     -a :列出当前所有正在运行的容器+历史上运行过的
     -l :显示最近创建的容器。
     -n:显示最近n个创建的容器。
     -q :静默模式,只显示容器编号。
     --no-trunc :不截断输出
#{创建与启动容器}: docker run [OPTIONS] [镜像名:TAG 或 镜像ID] [COMMAND][ARG...]  
    OPTIONS说明
      -i:表示运行容器
      -t:表示容器启动后,并且进入
      --name:表示为创建的容器命名
      -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
      -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
      -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

#{交互式容器(启动并登录进去)}
    使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令,并取名为mycentos
    docker run -it --name=mycentos centos:7 /bin/bash
    使用exit命令退出当前容器
    然后用docker ps -a 命令查看发现该容器也随之停止
#{守护式容器(先创建容器,然后登录进去)} 
    创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):docker run -di --name=mycentos2 centos:7

#{登录守护式容器方式}
    docker exec -it [容器名或容器ID]  /bin/bash (exit退出时,容器不会停止)
 
#{启动容器}:         docker start   [容器ID值或容器名][容器ID值或容器名][...]
#{停止容器}:         docker stop    [容器ID值或容器名][容器ID值或容器名][...]
#{重启容器}:         docker restart [容器ID值或容器名]
#{强制停止容器}:      docker kill    [容器ID值或容器名]  

#{文件拷贝}
   将宿主机文件拷贝到容器内:docker cp [需要拷贝的文件或目录] [容器名称]:[容器中目录]
   docker cp 1.txt mycentos2:/root/
   将容器内文件拷贝到宿主机:docker cp [容器名称]:[容器目录下的文件] [宿主机的目录]
   docker cp mycentos2:/root/111.txt /root/
#{目录挂载}
   在创建容器的时候,将宿主机的目录和容器内的目录进行绑定映射关系,那么修改宿主机的某个目录下的文件就可以影响到容器中文件。
   创建容器 添加-v参数 后边为   宿主机目录:容器目录
   docker run -di --name=mycentos2 -v /usr/local/myhtml:/usr/local/myhtml centos:7
   如果共享的是多级的目录,可能会出现权限不足的提示:Permission denied
   因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数  --privileged=true  来解决挂载的目录没有权限的问题
docker run -di --name=mycentos3 -v /usr/local/myhtml:/usr/local/myhtml --privileged=true centos:7

#{查看容器IP地址}
    docker inspect mycentos3
    docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos3 :直接获取容器IP    
    ping [容器IP地址]
#{删除容器(只能删除停止的容器)}
    删除所有容器:docker rm 'docker ps - a -q'
   
#{docker 设置初始密码,进入mysql}
docker run -di --name=mysql5.5.49 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root  2f94d2a2ac89
docker exec -it mysql5.5.49 /bin/bash
mysql -u root -p
root
#{开启MySql远程访问权限}
  use mysql;
  update user set host='%' where user='root';
  flush privileges;      
       
#{UnionsFS(联合文件系统)}
  镜像是一种文件,也是一个联合文件系统,Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统。
  
#{为什么Docker镜像要采用UnionFS这种分层结构}
    最大得一个好处就是---共享资源

#{Dockefile是什么?}
    Dockerfile是描述镜像构建的一种文件。
    
#编写Dokerfile--(bulid)-->Docker镜像--(run)-->Docker容器 

#{Dockerfile的结构}
   1.基础镜像信息
   2.维护者信息
   3.镜像操作指令
   4.容器启动指令
------------------------------
#基于centos镜像
FROM centos

#维护人的信息
MAINTAINER The CentOS Project <303323496@qq.com>

#安装httpd软件包
RUN yum -y update
RUN yum -y install httpd

#开启80端口
EXPOSE 80

#复制网站首页文件至镜像中web站点下
ADD index.html /var/www/html/index.html

#复制该脚本至镜像中,并修改其权限
ADD run.sh /run.sh
RUN chmod 775 /run.sh

#当启动容器时执行的脚本文件
CMD ["/run.sh"]
----------------------------------
#{Dockerfile常用指令}
FROM:指定基础镜像
MAINTAINER:指定维护者信息
RUN:执行命令行命令
CMD:启动容器时执行的Shell命令
EXPOSE:声明运行的服务端口号
ENV:为docker容器设置环境变量
ADD:拷贝文件或目录到镜像中,有压缩包自动解压
COPY:拷贝文件
ENTRYPOINT:启动容器时执行的Shell命令,类似CMD
VOLUME: 挂载目录
USER:为RUN、CMD和ENTRYPOINT执行Shell命令指定运行用户
WORKDIR:Docker默认的工具目录是/,如果想让其他指令在指定的目录下执行,就得靠 WORKDIR
#{编译Dockerfile文件命令}:docker build -t [新镜像名]:TAG .  点表示当前目录
#{列出镜像的变更历史}: docker history [镜像名]

#{Docker手动部署springBoot项目}



#{Idea远程连接Docker实现一键部署}
  1. 编辑服务器上docker.service文件    vim /usr/lib/systemd/system/docker.service
  2.在 --seccomp-profile 的下一行添加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
  3. systemctl daemon-reload
  4. service docker restart
  5. 测试远程连接是否正常   curl http://localhost:2375/version
  6. 然后开启端口或者关闭防火墙 二选一
      firewall-cmd --zone=public --add-port=2375/tcp --permanent  
      chkconfig iptables off
  7.在浏览器访问http://[宿主机IP地址]:2375/version    
  8.配置Idea连接到远程的Docker
  9.在idea中使用docker-maven-plugin
  10.pom.xml中添加完依赖后,点击maven的package命令自动构建镜像
---------------------------------------------------------------------------------
<build>

        <finalName>${project.artifactId}</finalName>

        <plugins>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
            <!-- 跳过单元测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

            <!--使用docker-maven-plugin插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>bruceliu/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--指定基础镜像jdk1.8-->
                    <baseImage>java</baseImage>
                    <!--镜像制作人本人信息-->
                    <maintainer>bruceliu@email.com</maintainer>
                    <!--切换到ROOT目录-->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://122.51.50.249:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

        </plugins>
    </build>
---------------------------------------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些分析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调分工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和分工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值