首页 > 其他 > 详细

Docker

时间:2020-06-03 10:42:33      阅读:56      评论:0      收藏:0      [点我收藏+]

Docker教程

1.Docker概述

Docker简单的讲就是一个虚拟化工具,容器化技术,可以实现快速简化服务部署之类的功能,它的核心是一次构建,到处部署,在第一次构建的时候,会构建完可用的docker镜像,如果以后需要使用,只需要通过几行命令拉取镜像,然后根据镜像创建出一个容器,将服务跑起来即可。

1.1 Docker介绍

Docker的意思是码头工人,思想就是"集装箱",表示在物流中简化了运输中多次装货和卸货的时间 ,只需要进行一次封装,节省了大量的资源和时间成本

Docker不像传统的方式一样,只给你打包后的jar包或者war包以及说明安装文档,然后再去根据文档安装环境部署,而Docker是直接给一个docker镜像,这个镜像不仅包含运行的jar包和war包,还有运行服务所依赖的环境,只需要直接拉取镜像,然后创建容器,直接运行就可以。

那么我们现在知道Docker是为了一次构建,到处部署,那么如果只有一台服务器,也不会迁移,只需要部署一次,那么还需要使用Docker吗?如果你确信你的应用都是一次性的,而且只提供给自己使用,那么docker在这种场景下的优势不是特别明显,但是,你真的真的确信,你所做的工作只是一次性的吗?

总结一下Docker带来的好处:

更高效的交付和部署引用

  • 传统:一堆帮助文档,安装运行程序
  • Docker:打包镜像发布测试 ,只需几条命令

**更便捷的升级和扩展 **:

  • 要增加服务器?打包镜像分分中扩展一个服务器

更高效的计算资源利用

  • Docker是内核级别的虚拟机化,可以在一个物理机运行很多个容器实例,可以将服务器的性能提高到最佳

参考:Docker是什么?

1.2 Docker组成

技术分享图片

镜像(Images)

镜像就是一个模版,可以通过镜像构建多个容器,镜像不可以直接运行的,避免在运行中或者配置中损坏,最终服务运行或者项目运行就是在容器中运行的

容器(Container)

Docker利用容器技术,由镜像创建容器,独立运行一个或者一组应用,每个容器由自己的专用文件系统,通过命令启动、停止、删除应用等!

仓库(Registry)

仓库就是存放镜像的地方,分为共有仓库和私有仓库,镜像就是从仓库下载的

默认使用的是Docker Hub(国外的)下载很慢,可以使用国内的仓库,比如阿里云...

1.3 Docker为什么比虚拟机快

1.Docker不需要硬件资源虚拟化,运行在Docker容器上的应用直接使用的物理机资源,所以在内存、CPU上比虚拟机的利用率更高

2.Docker利用的是宿主机的内核,当新建一个容器的时候,不需要和虚拟机一样重新加载操作系统,省去了大量的时间

2.Docker安装

2.1 开始安装

1.卸载旧的版本

sudo yum remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-engine

2.下载需要的安装包

sudo yum install -y yum-utils

3.设置镜像存储库

#这是国外的,下载很慢
sudo yum-config-manager     --add-repo     https://download.docker.com/linux/centos/docker-ce.repo 

#这是阿里云的,推荐
sudo yum-config-manager     --add-repo     http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.安装的Docker引擎、客户端、容器;ce是社区版,ee是企业版,官方推荐使用社区版

#安装最新版本
sudo yum install docker-ce docker-ce-cli containerd.io


#安装指定版本
#1.列出可用版本
yum list docker-ce --showduplicates | sort -r 

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

#2.通过软件包的名称+版本字符串进行安装 VERSION_STRING:第二列第一个:一直到-前的字符,比如18.09.1
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

5.启动Docker

sudo systemctl start docker

6.测试是否安装成功

docker version

7.运行hello-world

sudo docker run hello-world

技术分享图片

run的执行流程:

技术分享图片

8.查看下载的镜像

docker images

9.卸载Docker

#1.卸载Docker Engine,CLI和Containerd软件包:
sudo yum remove docker-ce docker-ce-cli containerd.io

#2.删除主机上的映像,容器,卷或自定义配置文件 /var/lib/docker:docker的默认工作路径
sudo rm -rf /var/lib/docker

2.1 阿里云镜像加速器

因为很多镜像在国外,下载非常慢,配上加速器会更快

阿里云官网容器镜像地址:https://cr.console.aliyun.com/cn-beijing/instances/mirrors

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-‘EOF‘
{
  "registry-mirrors": ["https://e859w42o.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

3.常用命令

3.1 镜像命令

查看本地主机上的所有镜像

$ docker images [-a] [-q]
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB

# 解释
REPOSITORY:镜像名称 
TAG:镜像版本
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

# 可选项
-a,--all:列出所有镜像
-q,--quiet:只显示镜像ID

搜索镜像

镜像搜索网址:https://hub.docker.com/

$ docker search imagename 

# 搜索mysql
$ docker search mysql [--limit]
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql               MySQL is a widely used, open-source relation…   9574                [OK]
mariadb             MariaDB is a community-developed fork of MyS…   3478                [OK]

# 可选项
--limit 5:只显示前5条镜像
--filter=stars=3000:只显示stars大于3000的镜像

下载镜像

$ docker pull imagename[:tag]

# 下载mysql
$ docker pull mysql
Using default tag: latest    #默认下载最新版 
latest: Pulling from library/mysql  
afb6ec6fdc1c: Pull complete  #分层下载,它下载过以后,下载其他mysql镜像版本时重复的就不需要下载了
0bdc5971ba40: Pull complete
97ae94a2c729: Pull complete
f777521d340e: Pull complete
1393ff7fc871: Pull complete
a499b89994d9: Pull complete
7ebe8eefbafe: Pull complete
597069368ef1: Pull complete
ce39a5501878: Pull complete
7d545bca14bf: Pull complete
211e5bb2ae7b: Pull complete
5914e537c077: Pull complete
Digest: sha256:a31a277d8d39450220c722c1302a345c84206e7fd4cdb619e7face046e89031d
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #mysql的真实地址

# 下载mysql5.7版本的,版本号必须是存在才可以下载,如果下载99.99版本肯定会报错找不到的
$ docker pull mysql:5.7

删除镜像

$ docker rmi -f IMAGE ID 

# 根据镜像ID删除镜像
$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 a4fdfd462add        12 days ago         448MB
mysql               latest              30f937e841c8        12 days ago         541MB
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
$ docker rmi -f a4fdfd462add

#  根据镜像ID删除多个镜像
docker rmi -f a4fdfd462add 30f937e841c8

# 删除全部镜像,意思就是先查询出来所有的ID,然后全部删除
$ docker rmi -f $(docker images -aq)

3.2 容器命令

说明:有了镜像才可以创建容器,下载一个centos镜像来学习

$ docker pull centos

新建容器并启动

$ docker run [可选项] imagename

# 可选项
--name : 容器名字
-d.    : 以后台方式运行
-it    : 进入容器
-p     : 指定容器端口
	-p 主机端口:容器端口(常用)
	
# 启动并进入容器
$ docker run  -it centos

退出容器

# 退出并停止容器
$ exit

# 退出但不停止容器
Control + P + Q

查看容器状态

$ docker ps [-a] [-q]

# 查看当前运行的容器
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
64ac46420f91        centos              "/bin/bash"         14 seconds ago      Up 13 seconds                           vigorous_ishizaka

# 查看所有的容器
$ docker ps -a

# 查看所有的容器ID
$ docker ps -aq

删除容器

$ docker rm [-f] containerId

# 根据ID删除指定的容器
$ docker rm 64ac46420f91

# 删除全部容器
$ docker rm -f $(docker ps -aq)

# 可选项 
-f :强制删除,运行中的容器不能直接删除,需要-f参数

启动和停止容器

docker start containerID 		#启动容器
docker restart containerID 	#重启容器
docker stop containerID 		#停止当前运行中的	容器
docker kill containerID  		#强制停止当前容器

3.3 其他命令

查看日志

$ docker logs [-t] [-f] [--tail num] containerID

# 可选项
-t : 显示时间戳
-f : 跟踪显示日志
--tail num:显示num行日志

# 跟踪查看全部日志
docker logs -tf containerID

查看当前容器的元数据信息

$ docker inspect containerID

进入容器

# 进入后开启一个新的终端
$ docker exec -it containerID /bin/bash

# 进入容器正在执行的终端
$ docker attach containerID

将容器中的文件拷贝到主机上

$ docker cp containerID:容器文件路径 主机路径

eq:
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              
51c13cc979ed        centos              "/bin/bash"         4 minutes ago       Up 1 
# 1.进入容器
$ docker exec -it 51c13cc979ed /bin/bash
# 2.在容器创建一个文件
$ touch /home/test.java
# 3.退出容器
$ exit
# 4.将容器中的test.java拷贝到主机的/home下
$ docker cp 51c13cc979ed:/home/test /home

3.4 实践安装Nginx

# 1.搜索镜像
$ docker search nginx

# 2.下载nginx镜像
$ docker pull nginx

# 3.新建容器并启动
# -d:在后台启动
# --name:容器名字为nginx01
# -p:指定端口映射,在浏览器访问 http://ip:3344会映射到80端口
$ docker run -d --name nginx01 -p 3344:80 nginx

为什么需要端口映射呢?

首先外网可以访问Linux,而Linux无法直接访问Docker,需要进行一个端口映射才可以访问

技术分享图片

Docker

原文:https://www.cnblogs.com/dingjn/p/13035095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!