千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  一文带你学会Docker的使用

一文带你学会Docker的使用

来源:千锋教育
发布人:lxl
时间: 2023-04-06 11:33:21

  一. 问题背景

  前几天有个小伙伴私信我,说他遇到了这样一个问题:“Docker是如何解使用的”? 这个问题确实不是很容易进行口头回答,只能动手操作,一步一步地讲解,这样才能让大家更加直观地感受Docker具体是怎样使用的。那就请大家来具体操作一下吧。

  二. Docker详解

  Docker是什么

  在使用之前,我们首先要明白Docker是什么。Docker其实就是一个管理镜像的容器。所谓的容器,说白了就是用来装东西的工具。我们在Java中也学习了一些容器的概念,比如集合和数组。Docker这个容器也是用来装东西的,那是装什么的呢?它是用来装镜像的!

  镜像:我们可以认为是一个虚拟机(用软件来模拟硬件,完成整个PC机的功能)。通俗地说,你可以认为镜像就是一台PC机,只不过这个虚拟机是用软件来进行模拟的。

  Docker说白了,就是用来搭载微型计算机的容器,这个微型计算机的操作系统就是Linux。

  2. Docker能干什么

  ①. 基本服务的安装。

  ②. 项目的容器化部署。

  3. Docker基本安装

  Docker的安装

  一、安装docker

  1、Docker要求Centos系统的内核版本高于3.10,查看本页面的前提条件来验证你的Centos版本是否支持 Docker 。

  通过 uname -r 命令查看你当前的内核版本

  $ uname -r

  2、使用root权限登录Centos。确保yum包更新到最新。

  $ sudo yum update

  3、卸载旧版本(如果安装过旧版本的话)

  $ sudo yum remove docker docker-common docker-selinux docker-engine

  4、安装需要的软件包, yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

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

  5、设置yum源

  $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

  6、可以查看所有仓库中所有docker版本,并选择特定版本安装

  $ yum list docker-ce --showduplicates | sort -r

  7、安装docker

  $ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0

  $ sudo yum install#例如:sudo yum install docker-ce-17.12.0.ce

  8、启动并加入开机启动

  $ sudo systemctl start docker

  $ sudo systemctl enable docker

  9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

  $ docker version

  二、问题

  1、因为之前已经安装过旧版本的docker,在安装的时候报错如下:

  复制代码

  Transaction check error:

  file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

  file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

  file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

  file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

  2、卸载旧版本的包

  $ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64

  3、再次安装docker

  $ sudo yum install docker-ce

  4. Docker下的基本命令的使用

  docker images :查看本地仓库中有哪些docker镜像

  docker search 镜像的名字 :查看远程镜像库中这个名字的镜像有哪些

  远程镜像的网站

  https://registry.hub.docker.com/u/library

  docker pull 镜像名字:镜像的版本号 去远程下载咋们的镜像

  docker run -d -p 宿主机的端口:镜像的端口 镜像的名字:镜像的版本号

  镜像启动之后的实例叫做容器

  docker ps -a :查看正在运行的容器有哪些

  docker stop 实例id :停止一个容器

  docker restart 容器的id :表示的是重新启动这个容器

  docker rm 容器id :删除某一个容器

  docker rmi 镜像id :删除一个镜像

  docker exec -it 容器id /bin/bash :进入某一个容器

  docker stop `docker ps -a` :停止所有正在运行的容器

  docker rm `docker ps -a` :删除所有容器

  5. Docker下的基本服务的安装

  5.1 Tomcat的安装

  docker pull tomcat:8.0.20

  docker run -d -p 8989:8080 tomcat:8.0.20

  如果是想部署我们的项目我们如何来做呢?

  docker run -d -v /usr/local/webapp/:/usr/local/tomcat/webapps -p 8989:8080 tomcat:8.0.20

  -d:后台运行

  -p :端口映射

  -v:将宿主机上的某一个目录映射到镜像的某一个目录上

  5.2 MySQL的安装

  docker pull mysql:5.7.10

  docker run --name bobo-mysql -e MYSQL_ROOT_PASSWORD=root -d -p 3307:3306 -v /usr/local/bobo-mysql:/var/lib/mysql mysql:5.7.10

  5.3、Redis的安装

  docker pull redis:5.0.14

  docker run --name bobo-redis -d -p 6780:6379 redis:5.0.14 redis-server --save 60 1 --loglevel warning

  6. Dockerfile的基本使用

  Dockerfile能干嘛?

  你可以认为我们的Dockerfile就是用来进行镜像构建。在开发中可能有这样一个需求:就是可以自己构建自己的镜像 完成项目的容器化的部署,简单的说就是可以自己构建自己的镜像从而去完成 这样的一个功能

  6.1 以项目的部署为例给大家举例

  6.1.1 编写Dockerfile文件

  from centos:7 //表示的是从那个基础镜像开始构建

  maintainer xiaobobo //作者是谁

  add jdk-8u20-linux-x64.gz /usr/local //将前面的文件复制到镜像中并进行解压

  add apache-tomcat-9.0.8.tar.gz /usr/local

  env JAVA_HOME /usr/local/jdk1.8.0_20 //配置环境变量

  env PATH $JAVA_HOME/bin:$PATH //配置环境变量并使能

  copy cd-2204-simple-docker.war /usr/local/apache-tomcat-9.0.8/webapps //复制文件到镜像指定位置不解压

  expose 8080 //对外暴露的端口

  CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"] //启动镜像的时候执行的命令

  6.1.2 构建镜像并启动

  docker build -t 镜像的名字:版本号

  6.2 换一种玩法

  from centos:7

  maintainer xiaobobo

  copy jdk-8u20-linux-x64.gz /usr/local

  copy apache-tomcat-9.0.8.tar.gz /usr/local //复制上去不解压 那么我们就需要手动的进行解压

  run cd /usr/local && tar -zxvf jdk-8u20-linux-x64.gz

  run cd /usr/local && tar -zxvf apache-tomcat-9.0.8.tar.gz

  env JAVA_HOME /usr/local/jdk1.8.0_20

  env PATH $JAVA_HOME/bin:$PATH

  copy cd-2204-simple-docker.war /usr/local/apache-tomcat-9.0.8/webapps

  expose 8080

  CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]

  6.3 再换一种玩法

  from centos:7

  maintainer xiaobobo

  copy jdk-8u20-linux-x64.gz /usr/local

  copy apache-tomcat-9.0.8.tar.gz /usr/local

  run cd /usr/local && tar -zxvf jdk-8u20-linux-x64.gz

  run cd /usr/local && tar -zxvf apache-tomcat-9.0.8.tar.gz

  env JAVA_HOME /usr/local/jdk1.8.0_20

  env PATH $JAVA_HOME/bin:$PATH

  copy cd-2204-simple-docker.war /usr/local/apache-tomcat-9.0.8/webapps

  expose 8080

  ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"] //这个也可以启动

  6.4 注意

  COPY和ADD都能将文件从宿主机复制到镜像上,但是ADD是技能复制还能解压

  COPY是只能复制不能解压

  CMD和ENTRYPOINT都能执行启动命令

  ENTRYPOINT如果写了多个都能执行

  CMD只能执行最后一个

  7. DokerCompose的使用

  7.1 DockerCompose有啥用呢

  我们在部署项目的时候,如果我们需要将MySQL,Tomcat,Nginx全部进行部署,那么应该怎么办呢?谁先启动 谁后启动呢?

  Nginx---Tomcat----MySQL

  首先启动的应该是MySQL,然后启动的是Tomcat,最后启动才是Nginx,那么我们的DockerCompose的作用就是能实现容器启动的这样一个编排。

  7.2 安装咋们的DockerCompose了

  yum install python-pip

  yum install docker-compose

  docker-compose version 如果出现了版本号 那么说明就没有问题

  7.2.1 编写docker-compose.yml

  version: '2'

  services:

  web:

  build: ./web

  ports:

  - "9999:8080"

  container_name: 'web'

  depends_on:

  - mysql

  mysql:

  image: mysql:5.7

  environment:

  MYSQL_ROOT_PASSWORD: root

  volumes:

  - /usr/local/docker-compose/mysql:/var/lib/mysql

  ports:

  - "3307:3306"

  container_name: 'mysql'

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

java的输入语句—— Scanner类

2023-05-04

java数据库操作常识事务的四大特性

2023-05-04

DML数据操作之增加或删除数据

2023-05-04

最新文章NEW

socket是什么?有什么作用?

2023-05-04

Java常量定义是什么

2023-04-28

一分钟带你学多线程

2023-04-28

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>