一文带你学会Docker的使用
一. 问题背景
前几天有个小伙伴私信我,说他遇到了这样一个问题:“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'
相关推荐HOT
更多>>如何添加Java环境变量?
要添加Java环境变量,可以按照以下步骤:并安装Java开发工具包(JDK)、找到Java安装路径、设置JAVA_HOME环境变量、添加Java可执行文件路径到PATH...详情>>
2023-05-04 11:00:56从零开始学Java之String字符串的编码
对很多小白来说,可能不明白什么是字符编码,也不知道为什么要有字符编码,所以先来给大家简要地介绍一下字符编码。详情>>
2023-05-04 10:21:02新手速来!几步带你掌握MyBatis Plus
Mybatis-Plus(简称MP)是一款Mybatis的增强工具,它是在Mybatis的基础上实现的简化开发工具。Mybatis-Plus给我们提供了开箱即用的CRUD操作、自动...详情>>
2023-04-28 10:57:09学习java需要什么基础?基础知识有哪些?
网络编程:了解基本的网络编程概念和协议,熟悉 Java 网络编程 API。建议在学习 Java 之前,先学习一些基础的编程语言,如 C 或 Python 等,这...详情>>
2023-04-28 10:41:14