docker&安装&常用命令&docker网络

学习视频

docker视频地址:https://b23.tv/BV1og4y1q7M4/p1

Docker 学习

入门 :常用命令、commit容器

docker精髓:容器数据卷、DockerFile、Docker网络

企业实战:Docker Compose(容器的整合管理),Docker swarm(管理docker 集群),CI/CD(持续集成持续部署) jenkins流水线。

Docker 概述

Docker 为什么出现?

一款产品:开发-上线 两套环境!应用环境,应用配置!

开发 — 运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大

环境配置是十分麻烦的,每一个机器都要部署环境(集群Redis,ES,Hadoop。。。)费时费力

发布一个项目(jar + (Redis MySql JDK ES)),项目能不能带上换件安装打包!

之前在服务器配置一个应用的环境Reids MySql jdk ES Hadoop 配置超麻烦,不能够跨平台。

Windows 最后发布到linux!

传统:开发jar,运维来做环境的配置!

现在:开发导包部署上线,一套流程做完!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sm2FQSKM-1590407845895)(docker.images/image-20200517141924417.png)]

Docker 通过隔离机制,可以将服务器利用到极致!

Docker 历史

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2S0A6Wjb-1590407845897)(docker.images/image-20200517144653924.png)]

聊聊 Docker

Docker 是基于GO 语言开发的!开源项目!

官网:https://hub.docker.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rps2Bpw-1590407845898)(docker.images/image-20200517145103799.png)]

文档地址:https://docs.docker.com/ Docker文档是超级详细的!

仓库地址:https://hub.docker.com/ git push pull

Docker 能干嘛

虚拟机技术

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EfNA7mmQ-1590407845899)(docker.images/image-20200517150519941.png)]

虚拟机技术缺点

1、资源占用十分多

2、冗余步骤多

3、启动很慢!

容器技术

容器化技术不是模拟的一个完成的操作系统,是运行在操作系统上的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZyAbv0T-1590407845901)(docker.images/image-20200517150425922.png)]

比较Docker 和 虚拟机技术的不同:

  • 传统的虚拟机,虚拟出硬件(内核、cpu、内存),在虚拟的硬件上运行一个完整的操作系统,然后在这个系统上安装和运行软件。
  • 容器技术,容器内的应用直接运行在宿主机上,容器是没有自己的内核的用的是操作系统的内核,所以很轻便。
  • 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响。
  • 容器能极大的利用资源

DevOps(开发、运维)

应用更快速的交付和部署

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

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

更便捷的升级和扩缩容
使用了Docker 之后,我们部署应用就和搭积木一样!

项目打包为一个镜像,扩展服务器。拿到镜像到服务器上运行即可。

更简单的系统运维

在容器化之后,我们的开发,测试环境都是高度一致的。

更高效的计算资源利用

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

Docker 安装

Docker 的基本组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJ3YWw37-1590407845901)(docker.images/image-20200517152504543.png)]

  • docker 客户端可以构建镜像,拉取镜像,运行镜像(变成容器)
  • docker 服务器,他是一个后台进程,里面有很多的image。我们运行image会产生一个容器。可以把image理解成类,容器就是类的实例对象。也就是说每个image运行产生的容器是不一样。
  • docker 仓库就是存放镜像的地方。
  • 镜像(image)
    • docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务。tomcat镜像==>run==>tomcat容器(理解成一台服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
  • 容器(container)
    • Docker 利用容器技术,可以独立运行一个或者一个组应用。容器是通过镜像来创建的。
    • 启动,停止,删除,基本命令!
    • 目前可以把这个容器理解为一个简易的linux 系统。
  • 仓库(repository)
    • 仓库就是存放镜像的地方!
    • 仓库分为共有仓库和私有仓库!
      • Docker hub (默认是国外的)
      • 阿里云,网易云…都有容器服务器(加速镜像下载)

安装Docker

官方文件:https://docs.docker.com/engine/install/centos/

# 这里的操作系统是CentOS7.6

# 查看内核版本,内核版本大于3.10及以上 才能安装新版的docker
uname -r

# 查看系统的详细信息
cat /etc/os-release
# 更新yum软件包索引
sudo yum makecache fast

# 删除以前的版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 需要安装的包
sudo yum install -y yum-utils

# 设置镜像的仓库
sudo yum-config-manager \
    --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  # 这是官方文档提供的,国外的下载很慢,选用国内的 https://download.docker.com/linux/centos/docker-ce.repo
    
# 安装docker  docker-ce 社区 ee是企业版本的
# 公式里面也是设置版本的
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动docker 
sudo systemctl start docker

# 查看docker 的信息
docker version
# 测试hello world
docker run hello-world
# 可以发现,如果在本地仓库找不到镜像,就会从远程拉取

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5As6W3p-1590407845902)(docker.images/image-20200517155636126.png)]

了解:卸载docker

# 卸载依赖
sudo yum remove docker-ce docker-ce-cli containerd.io
# 删除目录
sudo rm -rf /var/lib/docker

# /var/lib/docker docker默认资源路径

设置阿里云镜像加速

阿里云地址:https://homenew.console.aliyun.com/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WpUdRhDM-1590407845903)(docker.images/image-20200517143928718.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFwpdHme-1590407845903)(docker.images/image-20200517144041281.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TlSJG3Pr-1590407845904)(docker.images/image-20200517155833265.png)]

回顾HelloWorld流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZDYhEfN-1590407845904)(docker.images/image-20200517155636126.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-knfTJ6sS-1590407845905)(docker.images/image-20200517160525638.png)]

底层原理

Docker是怎么工作的?

Docker 是一个Clien-Server 结构的系统,Docker 的守护进程运行主机上。我们可以通客户端访问(Socket)!

DockerServer 接收到DockerClient 的指令,就会执行这个命令!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEpY6Qm5-1590407845905)(docker.images/image-20200517160941516.png)]

Docker 为什么比虚拟机快?

1、Docker 有着比虚拟机更少的抽象层

2、 Docker 利用的是宿主机的内核,VM 需要 Guest OS(客户端操作系统)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OhQ5pzni-1590407845906)(docker.images/image-20200517161224766.png)]

所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导, 虚拟机是加载Guest OS,分钟级别的启动速度。而Docker 是利用宿主机的操作系统(内核),省略了这个复杂的过程,秒级!

下面的图有问题:现在docker也支持windows系统了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aabp26cM-1590407845908)(docker.images/image-20200517161702738.png)]

Docker 常用命令

帮助命令

docker version # 显示docker的信息
docker info		 # 显示docker的系统信息,包括镜像和容器的数量
docker --help
docker 命令 --help # 万能命令

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-13rfbCK1-1590407845909)(docker.images/image-20200517162441151.png)]

镜像命令

**docker images **

# 查看本地安装的镜像,不能看到一些docker 内部的镜像
$ docker images
# 查看所有的镜像
$ docker images -a
# 查看所有镜像的id 
$ docker images -q -a
$ docker images -aq

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4iPYE1t5-1590407845910)(docker.images/image-20200517163106594.png)]

docker search image

一般都是去hub上找,都不用search命令找镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lzUiShcJ-1590407845911)(docker.images/image-20200517163401687.png)]

docker pull image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BoBAB7eE-1590407845912)(docker.images/image-20200517163711374.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-112EHT9p-1590407845913)(docker.images/image-20200517163732938.png)]

docker rmi image

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wKGuE8jp-1590407845913)(docker.images/image-20200517164344184.png)]

# 删除镜像
$ docker rmi 容器id|容器名字
# 删除全部镜像
$ docker rmi -f `docker images -qa`
# 或者是
$ docker rmi -f $(docker images -qa)

# rmi 删除镜像
# -f 强制删除,镜像有容器也能删除(停止的容器) 

容器命令

说明:我们有了镜像才可以创建容器,linux,下载一个conteos来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name=xxx 容器名字,用来区分容器
-d				 后台方式运行
-it(-i -t) 使用交互方式运行,可以使用镜像运行成容器,在使用容器直接执行我们的命令
-p				 指定容器的端口 -p 8080:8080
   	-p ip:主机端口:容器端口
   	-p 主机端口:容器端口(常用)
   	-p 容器端口
   	容器端口
   	
-P 				 随机指定端口(暴露出所有的端口)

# 测试 : 启动并进入容器(启动bash执行器,centos默认也是bash)
[root@haitao ~]# docker run -it centos /bin/bash
[root@12f33dcf0796 /]# echo $SHELL # 查看当前的shell执行器
/bin/bash
[root@74d8a9107de7 /]# ls # 查看容器内的centos,基础版本,很多命令都是不完整的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@12f33dcf0796 /]# exit # 退出交互模式
exit

列出容器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-daf7mX95-1590407845914)(docker.images/image-20200517171117069.png)]

退出容器

exit # 交互模式下,直接退出,停止容器
ctrl + p + q # 已进入容器的shell的情况下,退出容器(不停止容器)

删除容器

docker rm 容器id|容器名字	# 只能删除停止的容器,可以递归删除
docker rm -f 容器id|容器名字	# 删除容器,强制删除,容器正在运行也能删除
docker rm [-f] $(docker ps -qa) # 删除全部的容器
docker rm [-f] `$(docker ps -qa)` # 删除全部的容器
docker ps -qa | xargs docker rm [-f] # 删除全部的容器

# xargs 是Linux提供的将管道的输出结果作为下一个命令的输入

启动和停止容器的操作

docker start 容器id|容器名字 		# 启动容器
docker restart 容器id|容器名字	# 重启容器
docker stop 容器id|容器名字			# 停止当前正在运行到容器
docker kill 容器id|容器名字			# 强制停止当前容器(stop停止)

常用其他命令(对容器的操作)

后台启动容器

# 命令 docker run -d 镜像名|镜像id
[root@haitao /]# docker run -d centos

# 问题docker ps。发现容器停止了

# 常见问题,docker 容器使用后台运行,就必须要有一个前台进程(-it进入交互模式就是前台进程)。docker发现没有应用,就会自动停止。

# 比如nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了。

查看日志命令



[root@haitao /]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER # 容器的表示

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
      
      
# 自己编写shell脚本(产生日志)
# /bin/bash 指定linux 默认的shell执行器
# -c 在容器的控制台执行内容

[root@haitao /]# docker run -d centos /bin/bash -c "while true;do echo haitaoss;sleep 1; done;"
1d18de7e76d39bea90cb95baf77a26aff22e1085ee01c1be7940f9cf7ee3476e

#  查看容器的日志,-f --tail -t 都是帮助文档提示的
[root@haitao /]# docker logs -f --tail 10 -t 1d18de7e76d39bea90cb95baf77a26aff22e1085ee01c1be7940f9cf7ee3476e
2020-05-17T09:44:13.484858554Z haitaoss
2020-05-17T09:44:14.486079085Z haitaoss
2020-05-17T09:44:15.488527532Z haitaoss
2020-05-17T09:44:16.489815756Z haitaoss
       

查看容器的进程信息

[root@haitao /]# docker run -d centos /bin/bash -c "sleep 10;" # 运行一个容器,为了防止别太快退出,先休眠10秒
04bffaecd07049b42b42a0e1bee2c883677e0caf0fbdfabdcf5f7fcf8bcd8ade
[root@haitao /]# docker top 04bffaecd # 查看容器里面的进程信息
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                72759               72742               0                   17:52               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 10

查看容器的元数据

# 命令 docker inspect --help 
[root@haitao /]# docker inspect --help

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects

Options:
  -f, --format string   Format the output using the given Go template
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type
      
# 具体使用      
docker inspect 容器id:容器名字

# 测试
[root@haitao /]# docker run -d centos /bin/bash -c "while true;do echo haitaoss;sleep 10;done;"
[root@haitao /]# docker inspect 70b883

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OtrfO6b8-1590407845916)(docker.images/image-20200517180817919.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kTmlYD8E-1590407845916)(docker.images/image-20200517180923233.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y019kI2h-1590407845918)(docker.images/image-20200517181130845.png)]

进入当前正在运行的容器

# 通常我们的容器都是使用后台方式运行的,需要进入容器,修改一些配置

# 命令
docker exec -it 容器id|容器名字 命令

# 测试
[root@haitao /]# docker exec --help

Usage:  docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container # 需要输入要执行的命令才能成功进入,即容器后面时必须接命令的

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string       Working directory inside the container
[root@haitao /]# docker exec -it 953c57a1ab3d /bin/bash 
# /bin/bash 的执行效果就是生成一个bash命令的的shell。可以在linux 中测试


# 方式二
docker attach 容器id|容器名字

# docker exec # 使用容器内正在运行的终端,执行我们输入的命令(可以利用这个打开新的终端,方便我们操作)
# docker attach # 进入容器当前运行的终端。不会启动新的进程!(不能输入命令只能静静的看着)

从容器内拷贝文件到主机上

# 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值