文章目录
Docker(一):安装、命令、应用
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
一、 Docker的组成
镜像(image):
Docker镜像就相当于是一个文件系统,通俗来说就是用来创建容器的
容器(Container):
Docker 利用容器 (Container) 独立运行的一个或一组应用,容器是用镜像创建的运行实例,它可以被启动、开始、停止、删除,每个容器都是相互隔离的、保证安全的平台,可以把容器看做是一个简易版的Linux系统
容器就相当于Java中的对象,镜像相当于Java中的类
仓库(Repository)
仓库是集中存放镜像文件的场所
仓库注册服务器 (Registry) 上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签
仓库分为公开仓库和私有仓库两种形式
最大的公开仓库是DockerHub存放了数量庞大的镜像供用户下载,国内的公开仓库包括阿里云等
二、 Docker的底层原理
Docker的工作原理
Docker是基于C/S结构的系统,Docker的守护进程运行在Linux服务器(宿主机)上,当我们在Liunx服务器上(Docker-Client)输入Docker相关命令就会被发送给Doker-Server
为什么Docker比VM(虚拟机)快
1、Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显优势
2、当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核,因而避免引导、加载操作系统内核等比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS(虚拟机中的操作系统),这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个Docker容器只需要几秒钟
三、 Docker的安装
1.需要Liunx版本为CentOS7.0以上
2.卸载旧版本(非必须项)
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.安装Docker所需要依赖
# 想安装Docker,需要先将依赖的环境全部下载下来,就像Maven依赖JDK一样
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
4.设置镜像仓库
# 默认下载Docker会去国外服务器下载,速度较慢,可以设置为阿里云镜像源,速度更快
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.安装Docker
yum makecache fast
yum -y install docker-ce
6.启动Docker并测试
安装成功后,需要手动启动,设置为开机启动,并测试一下 Docker
#启动docker服务
systemctl start docker
#设置开机自动启动
systemctl enable docker
#测试
docker run hello-world
7.配置阿里云镜像加速器
mkdir -p /etc/docker
vim /etc/docker/daemon.json # 添加下方配置
------------------------
{
"registry-mirrors": ["https://v2ltjwbg.mirror.aliyuncs.com"]
}
------------------------
# 重启服务
systemctl daemon-reload
systemctl restart docker
四、 Docker的中央仓库
# 1.Docker官方的中央仓库:这个仓库是镜像最全的,但是下载速度较慢。
https://hub.docker.com/
# 2.国内的镜像网站:网易蜂巢,daoCloud等,下载速度快,但是镜像相对不全。
https://c.163yun.com/hub#/home
http://hub.daocloud.io/ (推荐使用)
3.在公司内部会采用私服的方式拉取镜像(添加配置)
#需要创建 /etc/docker/daemon.json,并添加如下内容
{
"registry-mirrors":["https://registry.docker-cn.com"],
"insecure-registries":["ip:port"]
}
#重启两个服务
systemctl daemon-reload
systemctl restart docker
五、 Docker常用命令
5.1 Docker帮助命令
1. docker version # 显示Docker的版本信息
2. docker info # 显示Docker的系统信息(包含镜像与容器的数量)
3. docker 命令 --help # 查看帮助(就是显示这个命令有什么可选项)
5.2 Docker镜像命令
1. docker images:显示本机上所有安装镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest bf756fb1ae65 8 months ago 13.3 kB
daocloud.io/library/tomcat 8.5.15-jre8 b8dfe9ade316 3 years ago 334 MB
------------
# 可选项
# docker images -a # 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/hello-world latest bf756fb1ae65 8 months ago 13.3 kB
daocloud.io/library/tomcat 8.5.15-jre8 b8dfe9ade316 3 years ago 334 MB
-------------
# docker images -q # 只显示镜像的id
bf756fb1ae65
b8dfe9ade316
--------------
# docker images -aq # 列出全部镜像的id
470671670cac
bf756fb1ae65
2. docker search:搜索镜像
# docker search mysql(镜像名)
NAME DESCRIPTION STARS
mysql MySQL is a widely used, open-source relation… 9553
mariadb MariaDB is a community-developed fork of MyS… 3471
# 可选项
docker search mysql -f=STARS=3000 # 列出镜像星数大于3000的镜像
3. docker pull:下载镜像
# docker pull mysql # 下载最新版本的MySQL
# docker pull mysql:5.7 # 下载指定版本的MySQL
4. docker rmi:删除镜像
docker rmi -f 镜像id # 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 镜像id # 删除指定的镜像
docker rmi -f $(docker images -aq) # 删除全部的镜像
5.3 Docker容器命令
1.运行容器
运行容器需要定制具体镜像,如果镜像不存在,会直接下载
#简单操作
docker run 镜像的标识|镜像的名称[:tag]
# docker run b8dfe9ade316
# docker run daocloud.io/library/tomcat:8.5.15-jre8
#常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[:tag]
# docker run -d -p 8081:8080 --name tomcat_a daocloud.io/library/tomcat:8.5.15-jre8
#-d 代表后台运行容器
#-p 宿主机端口:容器端口 ---> 为了映射当前Linux的端口和容器的端口
#--name 容器名称 ---> 指定容器的名称
#-it #-it [容器id] /bin/bash 使用交互模式运行,进入容器查看内容
#-v /etc/www:/var/www 指定容器内目录与宿主机目录共享(: 之前是宿主机文件夹,之后是容器需共享的文件夹)
2.查看容器
docker ps [-qa]
#-a 查看全部的容器,包括没有运行
#-q 只查看容器的标识
3.启动&停止&删除容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止正在运行的容器
docker kill 容器id # 强制停止
docker rm 容器id #删除指定容器
docker rm $(docker ps -qa) #删除全部容器
4.进入容器的内部
docker exec -it 容器id bash #可以进入容器的内部进行操作
5.退出容器
exit # 容器直接退出
Ctrl + P + Q # 容器不停止退出
5.4 Docker其它命令
1.查看日志
docker logs -tf 容器id # 查看实时日志
docker logs -t --tail 数量 容器id # 查看指定数量的日志
docker logs -f 容器id #-f:可以滚动查看日志的最后几行
2.查看容器中的进程信息
docker top 容器id
3.复制内容到容器
docker cp 文件名称 容器id:容器内部路径 #将宿主机的文件复制到容器内部的指定目录
4.修改容器名字
docker rename [原名字] [新名字]
六、 制作自己的镜像,并推送到阿里云
1.制作镜像
制作镜像有两种方式,通过docker commit ; 通过Dockerfile
这里我们使用docker commit
# 查看修改后的容器id
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED **
0e923ca1a9a1 daocloud.io/library/mysql:8.0.2 "docker-entrypoint.s…" 14 hours ago **
# 我们得知container_id为0e923ca1a9a1
# 接下来commit
docker commit 0e9
sha256:a7fee4550cb50ec9271d9af499ef87763b17f401b1a3d95b753aa90aa9d16eb5
# 至此我们就获得了一个自己制作的镜像,镜像id为a7fe
2.接下来你需要有一个阿里云账号,https://cr.console.aliyun.com/
3.创建命名空间,同时也可以创建镜像仓库(可以不创建,推送的时候自动创建)
这里我创建的命名空间名称为skyy
4.推送镜像到阿里云Docker Registry
# 登录
docker login --username=skyyemperor registry.cn-shanghai.aliyuncs.com
# 重命名镜像
docker tag a7fe registry.cn-shanghai.aliyuncs.com/skyy/halo:1.0
# 推送镜像
docker push registry.cn-shanghai.aliyuncs.com/skyy/halo:1.0
# 也可以从Registry中拉取
# docker pull registry.cn-shanghai.aliyuncs.com/skyy/tomcat:[镜像版本号]
七、 Docker应用
安装tomcat
运行Tomcat容器,为部署ssm工程做准备
docker run -d -p 8080:8080 --name tomcat daocloud.io/library/tomcat:8.5.15-jre8
#或者已经下载了tomcat镜像
docker run -d -p 8080:8080 --name tomcat 镜像的标识
运行MySQL容器
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:8.0.2