44docker

笔记docker

docker
  • Docker概述

  • Docker安装

  • Docker命令

    • 镜像命令
    • 容器命令
    • 操作命令
    • ....
  • Docker镜像

  • 容器数据卷

  • DockerFile

  • Docker网络原理

  • IDEA整合Docker

  • Docker 集群

  • Docker Swarm

  • CI\CD Jenkins

Docker概述

Docker为什么出现?

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

开发 ---- 运维。 问题:在我电脑上可以运行!版本更新,导致服务不可用!

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

发布一个项目(jar+(redis MySQL jdk ES)),项目能不能带上环境安装打包!

之前在服务器配置一个应用的环境 Redis MySQL jdk ES Hadoop,配置超麻烦,不能跨平台。windows,最后发布到Linux!

传统:开发jar,运维来做!

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

java -- apk --发布(应用商店)--王二使用apk--安装即可用

java --jar(环境)--打包项目带上环境(镜像)--(Docker仓库:商店)--下载发布的镜像---直接运行即可!

Docker给以上的问题,退出了解决方案!

image-20221223125317315

Docker的思想来自于集装箱!

JRE --多个应用,常见的端口冲突--原来都是交叉的

隔离:Docker核心思想!打包装箱,每个箱子之间互相隔离

举例:水果 生化武器

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

Docker与Vmware对比

虚拟机:在window中装一个Vmware,通过这个软件可以虚拟出一台或多太电脑 !笨重!

虚拟机也是属于虚拟化技术,Docker容器技术,也是一种 虚拟化技术!

vm:  Linux centos原生镜像(一个电脑)  隔离:需要开启多个虚拟机!   几个G   几分钟
docker: 隔离, 镜像(最核心的环境  4m + jdk + mysql)十分小巧,  运行镜像就可以了!  小巧! 几个M KB  秒级启动!

image-20221223131855131

Docker能干嘛

之前的虚拟机技术

image-20221223132452202

虚拟机技术缺点

1.资源占用十分多

2.冗余步骤多

3.启动很慢!

容器化技术

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

image-20221223133113655

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

  • 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在 宿主机的内,容器是没有自己的内核,也没有虚拟我们的硬件,所以就轻便
  • 每个容器是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps(开发、运维)

应用更快速的交付和部署

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

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

更便捷的升级和扩缩容

更简单的系统运维

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

更高效的计算资源利用:

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

Docker安装

Docker基本组成

image-20221223135951109

安装Docker

环境准备

1.需要会点Linux基础

2.Centos7

3.使用Xshell连接远程服务器进行操作

环境查看
#系统内核是3.10以上的
[root@VM-12-9-centos /]# uname -r
3.10.0-1160.71.1.el7.x86_64
# 系统版本
[root@VM-12-9-centos /]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
2.移除旧版本
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

安装一些必要的系统工具:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新yum缓存:

sudo yum makecache fast

安装 Docker-ce:

sudo yum -y install docker-ce

启动 Docker 后台服务

sudo systemctl start docker

测试运行 hello-world

docker run hello-world

image-20221223145000211

由于本地没有hello-world这个镜像,所以会pull一个hello-world的镜像,并在容器内运行。

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决。

image-20221223150954761

配置文件加入这个即可,然后重启docker

"registry-mirrors": ["https://registry.docker-cn.com"]

删除 Docker CE

sudo yum remove docker-ce
rm -rf /var/lib/docker

run流程

image-20221223151539038

底层原理

image-20221223152005646

Docker的常用命令

帮助命令

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

镜像命令

[root@VM-12-9-centos /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   15 months ago   13.3kB

image-20221223153550528

docker search 搜索镜像

[root@VM-12-9-centos /]# docker search mysql
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                           MySQL is a widely used, open-source relation…   13607     [OK]       
mariadb                         MariaDB Server is a high performing open sou…   5194      [OK]       
phpmyadmin                      phpMyAdmin - A web interface for MySQL and M…   710       [OK]       
percona                         Percona Server is a fork of the MySQL relati…   597       [OK]       
bitnami/mysql                   Bitnami MySQL Docker Image                      80 

image-20221223154334661

docker pull 下载镜像

例如:下载最新镜像

image-20221223154634783

指定版本下载

image-20221223154826425

image-20221223155352535

image-20221223155438501

docker rmi 删除镜像

(rm 删除 i值images(镜像))

[root@VM-12-9-centos /]# docker rmi 镜像id        # 通过id删除指定的镜像
[root@VM-12-9-centos /]# docker rmi 镜像id 镜像id 镜像id     # 删除多个镜像
[root@VM-12-9-centos /]# docker rmi -f $(docker images -aq)    # 删除所有镜像

image-20221223160050916

容器命令

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

[root@VM-12-9-centos /]# docker pull centos

新建容器并启动

[root@VM-12-9-centos /]# docker run [可选参数]  images

image-20221223161717213

启动容器

image-20221223162313004

image-20221223162017969

image-20221223162107395

列出所有的运行的容器

image-20221223162836942

[root@VM-12-9-centos /]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@VM-12-9-centos /]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                      PORTS     NAMES
fdeaa9cb4d8d   centos         "/bin/bash"   6 minutes ago   Exited (0) 56 seconds ago             epic_merkle
1691d42a8cb0   feb5d9fea6a5   "/hello"      2 hours ago     Exited (0) 2 hours ago                cranky_goldstine
2a4932baa99a   feb5d9fea6a5   "/hello"      2 hours ago     Exited (0) 2 hours ago                gracious_darwin
[root@VM-12-9-centos /]# 

退出容器

exit  #直接容器停止并退出
ctrl + P + Q   # 容器不停止退出

删除容器

image-20221223163435239

将未启动的容器删除

image-20221223231432536

启动和停止容器的操作

image-20221223163623112

常用其它命令

查看日志

image-20221223165157150

查看容器中进程信息

image-20221223165536963

查看镜像的元数据

image-20221223165609242

进入当前正在运行的容器

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

# 命令
方式一:docker exec -it 容器id  bashShell

# 测试
[root@VM-12-9-centos /]# docker exec -it e40f3036a9c0  /bin/bash
[root@e40f3036a9c0 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@e40f3036a9c0 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:13 pts/0    00:00:00 /bin/bash
root        16     0  0 10:16 pts/1    00:00:00 bin/bash
root        31    16  0 10:17 pts/1    00:00:00 ps -ef

    
# 方式二
# docker attach 容器id
[root@VM-12-9-centos /]# docker attach e40f3036a9c0           # 正在执行当前的代码....
[root@e40f3036a9c0 /]#        
 
#docker exec         # 进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach       # 进入正在执行的终端,不会启动新的进程!

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

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

    # 测试如下
[root@c1fc971a0ad9 home]# touch a.java      # 在内部新建一个a.java文件
[root@c1fc971a0ad9 home]# ls
a.java
[root@c1fc971a0ad9 home]# exit
exit
[root@VM-12-9-centos /]# docker ps -a   # 查看历史run的容器
CONTAINER ID   IMAGE          COMMAND           CREATED              STATUS                       PORTS     NAMES
c1fc971a0ad9   centos         "/bin/bash"       About a minute ago   Exited (0) 16 seconds ago              tender_ride
e40f3036a9c0   centos         "/bin/bash"       22 minutes ago       Exited (127) 5 minutes ago             dreamy_beaver
c28710f7e355   centos         "-it /bin/bash"   22 minutes ago       Created                                great_mirzakhani
7f47951bc6d9   centos         "-it /bin/bsah"   22 minutes ago       Created                                recursing_wescoff
fdeaa9cb4d8d   centos         "/bin/bash"       2 hours ago          Exited (0) 2 hours ago                 epic_merkle
1691d42a8cb0   feb5d9fea6a5   "/hello"          4 hours ago          Exited (0) 4 hours ago                 cranky_goldstine
2a4932baa99a   feb5d9fea6a5   "/hello"          4 hours ago          Exited (0) 4 hours ago                 gracious_darwin
[root@VM-12-9-centos /]# cd /home
[root@VM-12-9-centos home]# pwd
/home
[root@VM-12-9-centos home]# ls   # 查看当前主机目录下
lighthouse
[root@VM-12-9-centos home]# ll
total 4
drwx------ 3 lighthouse lighthouse 4096 Nov 20 20:26 lighthouse
[root@VM-12-9-centos home]# docker cp c1fc971a0ad9:/home/a.java /home      # 开始拷贝
[root@VM-12-9-centos home]# ls
a.java  lighthouse
[root@VM-12-9-centos home]# 
 
# 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现

小结

image-20221223184805362

熟能生巧 docker --help

attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

练习

https://hub.docker.com/ docker仓库

image-20221223190332471

作业1.docker安装nginx

# 1.搜索镜像 search  可以去docker hub搜索,也可以用命令
# 2.下载镜像 pull
# 3.运行测试
[root@VM-12-9-centos home]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    1403e55ab369   2 days ago      142MB
centos       latest    5d0da3dc9764   15 months ago   231MB
    
# -d 后台运行
# --name  给容器命名
# -p  宿主机端口:容器内部端口
[root@VM-12-9-centos home]# docker run -d --name nginx -p 3344:80 nginx
650396e599becf7d18f89994c043782945507bdc1b38b84f0c95f548ea5d88a0
[root@VM-12-9-centos home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                           NAMES
650396e599be   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp, 0.0.0.0:3344->81/tcp, :::3344->81/tcp   nginx

image-20221223192054274

image-20221223192119277

image-20221223192203120

测试成功!

image-20221223211522449

image-20221223212336234

进入容器

[root@VM-12-9-centos home]# docker exec -it 9ca3a6a8175f /bin/bash
root@9ca3a6a8175f:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@9ca3a6a8175f:/# cd /etc/nginx
root@9ca3a6a8175f:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@9ca3a6a8175f:/etc/nginx# 

端口暴露的概念

image-20221223205933488

image-20221223213018760

作业2:docker安装一个tomcat

# 官方的使用
$ docker run -it --rm tomcat:9.0

# 我们之前的启动都是后台,停止了容器,容器还是可以查到   , docker run -it --rm 一般用来测试,用完即删。

# 下载再启动
docker pull tomcat:9.0

# 启动运行
docker run -d -p 3355:8080 --name tomcat01 tomcat


####### 出现404 先把webapps删除,再把webapps.dist 改名 为webapps

image-20221223225052540

image-20221223214617393

docke镜像详解

镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来!

如何得到镜像:

  • 从远程仓库下载
  • 朋友拷贝给你
  • 自己制作一个镜像 DockerFile

docke镜像加载原理

image-20221224100738813

image-20221224100945658

分层理解

image-20221224101357197

image-20221224101646154

image-20221224102124302

image-20221224102336547

commit镜像

image-20221224112034501

容器数据卷

什么是容器数据卷

image-20221224120048831

image-20221224120104714

总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

image-20221224121715931

测试文件的同步

image-20221224122156153

再来测试

1、停止容器

2、宿主机上修改文件

3、启动容器

4、容器内的数据依旧是同步的!

image-20221224122424793

好处:以后修改只需在本地修改即可,容器内会自动同步!

实战:安装MySQL

思考:MySQL的数据持久化问题

# 获取镜像
[root@VM-12-9-centos home]# docker pull mysql:5.7

# 运行容器,需要数据挂载!   # 安装启动mysql,需要配置密码的,这是要注意点!
# 官方测试  docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

# 启动我们的
(-d 后台运行’ -p设置端口号 —e配置环境 -v卷挂载 --name容器名字)
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

# 启动成功后,本地用navicat连接测试
# navicat-连接到服务器的3310 ---3310 和 容器内的 3306映射,这个时候我们就可以连接上了!

image-20221224125315572

image-20221224130921381

# 在本地测试创建一个数据库(test),查看一下我们映射的路径是否ok!

假设我们将容器删除

image-20221224131554950

发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器化持久化功能!

具名和匿名挂载

image-20221224132133535

image-20221224132648851

image-20221224133035700

初识Dockefile

image-20221224134330328

image-20221224134516929

image-20221224134744491

image-20221224134906048

DockerFile

DockerFile介绍

image-20221225091258606

很多官方镜像都是基础包,很多功能没有,通常自己会给自己搭建镜像

DockerFile构建过程

基础知识

1、每个保留关键字(指令)都是必须是大写字母

2、执行从上到下顺序执行

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交!

构建过程

image-20221225093824523

DockFile的指令

image-20221225094844987

image-20221225094043327

创建一个自己的centos

image-20221225095722424

image-20221225100023141

image-20221225100101516

image-20221225100112652

使用docker history 镜像id  # 可查看镜像生成历史
CMD 和 ENTRPOINT 区别

image-20221225100827854

image-20221225101217857

小结

image-20221225120419178

posted @ 2022-12-23 23:40  __username  阅读(26)  评论(0编辑  收藏  举报

本文作者:DIVMonster

本文链接:https://www.cnblogs.com/guangzan/p/12886111.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。