Docker-base-learn

docker概述

Docker的思想来自于集装箱

隔离机制 核心思想 互相隔离

轻巧 与VM比较

虚拟机 Docker容器技术 均为虚拟化技术

vm linux centos 原生镜像(一个电脑)隔离,多开虚拟机 较大

docker 隔离,镜像(最核心的 环境)运行镜像 小巧

基于go语言的开源项目

Docker历史

2010年 美国 dotcloud

做 pass的云计算服务 ! LXC 有关的容器技术(命名为docker)

2013年开源(每月更新一个版本)

2014年4月9日,Docker1.0发布

Docker的作用

  • > 虚拟机技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h4yE7RTP-1618303524181)(C:\Users\16137\AppData\Roaming\Typora\typora-user-images\image-20210410154650218.png)]

虚拟机技术特点:

1.资源占用多

2.冗余步骤多

3.启动慢

  • > 容器化技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dd5b3sOi-1618303524183)(C:\Users\16137\AppData\Roaming\Typora\typora-user-images\image-20210410160335930.png)]

容器化技术不是模拟的一个完整的操作系统

比较

  1. 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在系统上安装和运行软件

  2. 容器内的应用直接运行在宿主机 的内容你,容器是没有自己的内核的,也没有虚拟硬件,因此轻便

  3. 每个容器间互相隔离,每个容器内部都有属于自己的文件系统,互不影响

    DevOps(开发、运行)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

更便捷的升级和扩缩容

Docker类似于搭积木

项目打包为一个镜像,拓展,服务器A,服务器B

更简单的系统运维

容器化后, 开发,测试高度一致

更高效的计算资源利用

Docker是内核级别的虚拟化,可以在同一个物理机上运行很多个容器实例。服务器的性能可以发挥到极致!

Docker安装

Docker的基本组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cB9wqYE6-1618303524184)(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimages2017.cnblogs.com%2Fblog%2F699473%2F201709%2F699473-20170903165333858-1169948952.png&refer=http%3A%2F%2Fimages2017.cnblogs.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1620635030&t=3316f72de525565a5c07434bebf12ba8)]

镜像(image)

docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务器),通过镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)

容器(container)

Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建。

启动 停止 删除 基本命令

简易的linux系统

仓库(repasitory)

存储镜像的地方

分为公有仓库和私有仓库

Docker hub (默认国外)

阿里云 华为云 都有容器服务器(配置镜像加速)

Docker的安装与卸载

环境准备

  1. 需要linux基础知识
  2. 系统

debian系,ubuntu,mint

redhat 系 RedHat,Fedora,CentOs等

3.Putty、XShell、SecureCRT、SSH Secure Shell Slien软件

环境查看

#系统内核查看 必须3.10以上
uname —r

手动安装

帮助文档

mac https://docs.docker.com/get-docker/#docker-for-mac

windows https://docs.docker.com/get-docker/#docker-for-windows/install/

linux https://docs.docker.com/get-docker/#docker-for-linux

以centos为例

#1.卸载旧版本  Docker 的旧版本被称为 docker,docker.io 或 docker-engine 
#当前称为 Docker Engine-Community 软件包 docker-ce 。

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.设置镜像仓库
 yum-config-manager \
    --add-repo \
    https://mirrors.bfsu.edu.cn/help/docker-ce/#北京外国语大学开源软件镜像站
    #更新索引
    yum makecache fast
#4.安装docker ce社区  ee企业
yum install docker-ce docker-ce-cli containerd.io
#5.启动docker
systemctl start docker
#6.查看版本
docker version
#7.hello-world
 docker run hello-world
#8.查看下载hello-world
docker images
 
    
    

脚本自动安装

国内安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

国外

sudo curl -sSL https://get.daocloud.io/docker | sh

卸载docker

 #1.卸载依赖
 yum remove docker-ce docker-ce-cli containerd.io
 #2.删除资源
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd
#/var/lib/docker  默认位置

安装docker-compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Ubuntu用户快速安装docker-compose

sudo apt-get update && sudo apt-get install -y python3-pip curl vim git moreutils
pip3 install --upgrade pip
pip install docker-compose

Docker的原理

Run的流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SblYpI1I-1618303524187)(C:\Users\16137\AppData\Roaming\Typora\typora-user-images\image-20210411143134087.png)]

底层原理

Docker是怎样工作的?

Docker是一个Client-Sever结构的系统,Docker的守护进程在本地运行在本地主机,通过Socket从客户端访问。

DockerSever接收到Docker Client的指令,就会执行命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vvyEJY1r-1618303524188)(C:\Users\16137\AppData\Roaming\Typora\typora-user-images\image-20210411143734190.png)]

Docker快的原因

Docker的抽像层比vm少

Docker利用的是宿主机的内核,vm需要的是Guest os

Docker-base-learn

新建容器时docker不需要重新加载操作系统内核避免引导,虚拟机需要加载Guest os,docker利用操作系统内核。

Docker-base-learn

Docker的常用命令

帮助命令

docker version #显示版本信息
docker info    #显示docker的系统信息,包括镜像和容器的数量
docker --help  #命令帮助文档

帮助文档地址:https://docs.docker.com/engine/reference/commandline/

镜像命令

docker images#查看所有本地的镜像
  #可选项
  --all , -a 		#列出所有的镜像
  --quiet , -q 		  #只显示镜像ID
docker search         #搜索镜像
  #可选项
docker pull            #下载镜像
docker rmi             #删除镜像
  #可选项
  -f 容器ID              #删除单个容器
  -f 容器ID -f 容器ID -f 容器ID #删除多个容器
  -f $(docker images -aq)  #删除全部容器

容器命令

docker run [可选参数]  images
#参数说明
--name="Name"     #容器名字
-d                #容器后台运行
-it               #使用交互方式运行,进入容器查看内容
-p                #指定容器的端口 -p 8080:8080
   -p  ip
   -p  主机端口:容器端口(常用)
   -p  容器端口
-p                随机端口

docker exec -it [name] /bin/sh  启动并进入容器
ls      查看目录
exit    退出
#列出运行的容器
docker ps      # 列出正在运行的容器
  #可选项
  -a           #列出当前正在运行的容器+历史运行过的容器
  -n=[number]  #显示最近创建的[number]个容器
  -q           #只显示容器编号 
#退出容器
exit           #容器停止并退出
Ctrl+P+Q       #容器不停止退出
#删除容器
docker rm 容器ID        #删除指定容器
docker rm -f $(docker ps -aq)  #删除所有容器
docker ps -a -q| xargs docker   #删除所有容器
#启动和停止容器操作
docker start 容器ID      #启动容器
docker restart 容器ID    #重启容器
docker stop 容器ID       #停止正在运行的容器
docker kill 容器id       #强制停止当前容器

常用其他命令

#后台启动容器
    docker run -d [imagesname]
     #问题docker ps,发现[imagesname]停止了
     #常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
     #nginx,容器启动候,发现自己没有提供服务,就会立刻停止,就没有程序了
#查看日志
 docker logs -f -t --tail 
 -tf  #显示日志
 --tail number #要显示的条数
 #查看容器中的进程信息
 docker top 容器ID
 #查看镜像元数据
 docker inspect 容器ID
 #进入当前正在进行的容器
 #我们通常容器都是在后台运行的,需要进入容器修改一些配置
 #命令
 docker exec -it 容器ID bashshell
 方法二
 docker attach 容器ID
 #docker exec #进入容器后开启一个新的终端,可以在里面操作(常用)
 #docker attach #进入容器正在执行的终端,不会启动新的进程

从容器内拷贝到主机上

docker cp 容器ID:容器内路径 目的的主机路径

小结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6jptu4B-1618303524192)(https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.4e00.com%2Fblog%2Fimg%2Flinux%2Fdocker%2Fdocker-commands.png&refer=http%3A%2F%2Fwww.4e00.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1620730777&t=5d5209e696986fb6cfebb1de26f76710)]

attach    Attach to a running container  #当前shell下attach连接指定运行镜像
build     Build an image from a Dockerfile  #通过Dockerfile定制镜像
commit    Create a new image from a container's changes  #提交当前容器为新的镜像
cp        Copy files/folders from a container to a HOSTDIR or to STDOUT  #从容器中拷贝指定文件或者目录到宿主机中
create    Create a new container  #创建一个新的容器,同run 但不启动容器
diff      Inspect changes on a container's filesystem  #查看docker容器变化
events    Get real time events from the server#从docker服务获取容器实时事件
exec      Run a command in a running container#在已存在的容器上运行命令
export    Export a container's filesystem as a tar archive  #导出容器的内容流作为一个tar归档文件(对应import)
history   Show the history of an image  #展示一个镜像形成历史
images    List images  #列出系统当前镜像
import    Import the contents from a tarball to create a filesystem image  #从tar包中的内容创建一个新的文件系统映像(对应export)
info      Display system-wide information  #显示系统相关信息
inspect   Return low-level information on a container or image  #查看容器详细信息
kill      Kill a running container  #kill指定docker容器
load      Load an image from a tar archive or STDIN  #从一个tar包中加载一个镜像(对应save)
login     Register or log in to a Docker registry#注册或者登陆一个docker源服务器
logout    Log out from a Docker registry  #从当前Docker registry退出
logs      Fetch the logs of a container  #输出当前容器日志信息
pause     Pause all processes within a container#暂停容器
port      List port mappings or a specific mapping for the CONTAINER  #查看映射端口对应的容器内部源端口
ps        list containers  #列出容器列表
pull      Pull an image or a repository from a registry  #从docker镜像源服务器拉取指定镜像或者库镜像
push      Push an image or a repository to a registry  #推送指定镜像或者库镜像至docker源服务器
rename    Rename a container  #重命名容器
restart   Restart a running container  #重启运行的容器
rm        Remove one or more containers  #移除一个或者多个容器
rmi       Remove one or more images  #移除一个或多个镜像(无容器使用该镜像才可以删除,否则需要删除相关容器才可以继续或者-f强制删除)
run       Run a command in a new container  #创建一个新的容器并运行一个命令
save      Save an image(s) to a tar archive#保存一个镜像为一个tar包(对应load)
search    Search the Docker Hub for images  #在docker
hub中搜索镜像
start     Start one or more stopped containers#启动容器
stats     Display a live stream of container(s) resource usage statistics  #统计容器使用资源
stop      Stop a running container  #停止容器
tag       Tag an image into a repository  #给源中镜像打标签
top       Display the running processes of a container #查看容器中运行的进程信息
unpause   Unpause all processes within a container  #取消暂停容器
version   Show the Docker version information#查看容器版本号
wait      Block until a container stops, then print its exit code  #截取容器停止时的退出状态值

作业练习

练习1:安装Nginx

#1.搜索镜像 search 
#2.下载镜像 pull
#3.运行测试
#-d 后台运行
#--name 容器命名
#-p 宿主机端口:容器内部端口
root@ecs-kc1-large-2-linux-20210405130538:~# docker run -d --name nginx01 -p 3389:80 nginx
04dd3a53cb4c641708187d717f9ada1cf49f208494a944b75a688a3d93163dfa
root@ecs-kc1-large-2-linux-20210405130538:~# curl localhost:3389
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
#4.进入容器
root@ecs-kc1-large-2-linux-20210405130538:~# docker exec -it nginx01 /bin/bash
root@04dd3a53cb4c:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
#5.退出容器
root@04dd3a53cb4c:/# exit
exit
#6.停止容器
root@ecs-kc1-large-2-linux-20210405130538:~# docker stop nginx01
nginx01

端口暴露

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTofT8Kz-1618303524193)(C:\Users\16137\AppData\Roaming\Typora\typora-user-images\image-20210412180123222.png)]

作业二:安装tomcat

#官方的使用
docker run -it --rm tomcat:9.0#用完即删,一般用于测试
#下载再启动
docker pull tomcat:9.0
#启动
docker images 
docker run -d -p 8888:80 --name tomcat01  tomcat
#进入容器
#docker exec -it tomcat01 /bin/bash
#出现linux没有命令,没有wabapps 
cp -r wabapps.dist/* wabapps

作业3:部署es+kibana

#es暴露端口多
#es十分耗内存
#es十分耗内存一般需要放置在安全目录!挂载
#-net somenetwork ? 网络配置
#启动elasticsearch
docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
#启动后 linux卡  docker stats 查看cpu状态
#测试es是否成功
#curl localhost:9200

#赶紧关闭,增加内存限制,-e 修改配置文件
docker stop 容器ID
#docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"
-e ES_JAVA-OPTS="Xms64 -Xmx512" elasticsearch:7.6.2
#查看docker stats

作业:如何使用kibana连接es,网络如何连接

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SoVbP0SH-1618303524193)(C:\Users\16137\AppData\Roaming\Typora\typora-user-images\image-20210413111223490.png)]

可视化

portainer

Rancher(CI/CD)

上一篇:Linux和vim编辑器常用指令(基础版)


下一篇:图书管理系统 简易版(JAVA)