欢迎光临
我们一直在努力

[心得]docker学习笔记

本站教程收集整理的这篇文章主要介绍了[心得]docker学习笔记,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

1. docker是什么???

(1) docker是一台类似虚拟机的功能, 内部由一个个镜像组成, 镜像里可以运行容器, 而这个容器可以是任何东西, 比如MysqL, 比如tomcat等等, 它的目的是将任何东西抽象出来, 放入镜像的容器中运行, 它不管你到底做了啥, 它只管把你装进容器中, 运行(2) docker是一个cs架构(3) 客户端docker自己构建容器, 通过网络连接到远程的docker的守护进程或者连接到本地的docker守护进行

(4) docker存在一个注册中心 Register, 这个注册中心存在共有和私有的方法, 用户可以将自己创建的镜像(容器)上传到注册中心, 这样别人也可以使用该用户的注册环境

2. 为什么使用docker? (docker有什么优点)

docker的优点有四个:? ? 1) ?上手快

用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。

? ? 2) 职责和逻辑分类

不用关系开发者环境和测试环境还有线上环境不同而出现bug的原因

? ? 3) 快速高效的开发声明周期

使用docker的话, 它是跨平台的, 只要在一个平台做好, 其他平台都可以一键使用, 做到项目的 开发, 测试, 上线 都是一个配置

? ? 4) 鼓励使用面向服务的架构

docker鼓励使用者在一个容器中开启一个微服务

3. 怎么用docker?

(0) 启动docker

systemctl start docker

?1

(1) 镜像的增删改查

1) 查看已经安装的docker镜像

[root@bogon docker]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
MysqL                     latest              d435eee2caa5        16 hours ago        456MB
gogs/gogs                 latest              521c911bafda        15 months ago       94.2MB
grafana/grafana           latest              17a5ba3b1216        15 months ago       245MB
centos/MysqL-57-centos7   latest              2e4ddfafaa6f        15 months ago       445MB
rancher/server            latest              38d4a75fa8f9        15 months ago       1.08GB
centos                    7                   5182e96772bf        15 months ago       200MB
redis                     latest              4e8db158f18d        15 months ago       83.4MB
tomcat                    7-jre7              fa2c33156fb9        16 months ago       357MB
Nginx                     latest              c82521676580        16 months ago       109MB
registry                  latest              b2b03e9146e1        16 months ago       33.3MB
google/cadvisor           latest              75f88e3ec333        23 months ago       62.2MB
tutum/influxdb            latest              c061e5808198        3 years ago         290MB

?1

2

3@H_793_31@mysqL latest d435eee2caa5 16 hours ago 456MB4

5

6

7

8

9

10

11

12

13

14

  • REPOSITORY:镜像名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小
  • 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

2) 查找网络上的docker镜像

[root@bogon docker]# docker search centOS
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOs.                   5688                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              125                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   114                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   100                                     [OK]
centos/MysqL-57-centos7            MysqL 5.7 sql database server                   64                                      
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              57                                      [OK]

?1

2

3

4

5

6

7

8

9

  • NAME:仓库名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3) 获得镜像

[root@bogon docker]# docker pull indigo/centos-maven
Using default tag: latest
latest: Pulling from indigo/centos-maven

?1

2

3

4) 删除镜像

按镜像ID删除镜像

docker rmi 镜像ID

删除所有镜像

docker rmi `docker images -q`

(2) 容器的增删改查

查看正在运行的容器

[root@bogon docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
bb30bc08bd70        MysqL               "docker-entrypoint.s…"   16 minutes ago      Up 11 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   docker_MysqL

?1

2

3

4

查看所有创建好的容器

[root@bogon docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS          便宜香港vps     PORTS                               NAMES
bb30bc08bd70        MysqL               "docker-entrypoint.s…"   19 minutes ago      Up 13 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   docker_MysqL

?1

2

3

4

查看停止的容器

[root@bogon docker]# docker ps -f status=exited
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

?1

2

3

查看最后一次运行的容器

[root@bogon docker]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
bb30bc08bd70        MysqL               "docker-entrypoint.s…"   21 minutes ago      Up 16 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   docker_MysqL

?1

2

3

4

查看容器的ip

我们可以@R_912_6749@查看容器运行的各种数据

docker inspect 容器名称(容器ID)?

也可以直接执行下面的命令直接输出IP地址

docker inspect --format='{{.NetworkSetTings.Ipaddress}}' 容器名称(容器ID)

创建容器

①创建容器命令:docker run

  • -i:表示运行容器
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • –name :为创建的容器命名。
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

(1)交互式方式创建容器

docker run -it --name=容器名称 镜像名称:标签 /bin/bash

这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态

退出当前容器

exit

(2)守护式方式创建容器:

docker run -di --name=容器名称 镜像名称:标签

登录守护式容器方式:

docker exec -it 容器名称 (或者容器ID)  /bin/bash

关闭容器

docker stop 容器名称(或者容器ID)

启动容器

docker start 容器名称(或者容器ID)

删除指定的容器

docker rm 容器名称(容器ID)

(3)应用部署

@H_195_35@mysqL部署

(1)拉取MysqL镜像

docker pull centos/MysqL-57-centos7

(2)创建容器

docker run -di --name=tensquare_MysqL -p 33306:3306 -e MysqL_ROOT_password=123456 MysqL

-p 代表端口映射,格式为? 宿主机映射端口:容器运行端口

-e 代表添加环境变量? MysqL_ROOT_password 是root用户的登陆密码

(3)远程登录MysqL

连接宿主机的IP ,指定端口为33306

tomcat部署

(1)拉取镜像

docker pull tomcat:7-jre7

(2)创建容器

创建容器? -p表示地址映射

docker run -di --name=mytomcat -p 9000:8080 
-v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7

Nginx部署

(1)拉取镜像

docker pull Nginx

(2)创建Nginx容器

docker run -di --name=myNginx -p 80:80 Nginx

redis部署

(1)拉取镜像

docker pull redis

(2)创建容器

docker run -di --name=myredis -p 6379:6379 redis

(4) 迁移和备份

1) 保存①容器保存成镜像

[root@bogon ~]# docker commit docker_MysqL
sha256:0228934f2164ee17ec6eda85f525f3628a842b0ba3ea8e85a2a3e4f440e17550

?1

2

②镜像备份

google/cadvisor           latest              eb1210707573        12 months ago       69.6MB

?1

[root@bogon ~]# docker save -o google_cadvisor.tar google/cadvisor:latest

?1

③镜像的恢复

[root@bogon ~]# docker load -i google_cadvisor.tar 
cd7100a72410: Loading layer [==================================================>]  4.403MB/4.403MB
9ea477e6d99e: Loading layer [==================================================>]  33.09MB/33.09MB
66b3c2e84199: Loading layer [==================================================>]  32.88MB/32.88MB
Loaded image: google/cadvisor:latest

?1

2

3

4

5

(5)?Dockerfile — 这个跟MakeFile很像

(1) 是什么?

?一个存放参数和命令的脚本, 用于创建镜像的脚本

(2) 为什么使用它?

1) 为开发团队提供一个相同的环境2) 测试人员可以通过开发团队的dockerfile脚本完成一个完全相同的环境3) 运维人员在部署时, 可以实现无缝衔接

(3) 怎么用?

1) 常用命令

  • FROM image_name:tag?? ??定义了使用哪个基础镜像启动构建流程
  • @H_911_73@mAINTAINER user_name?? ??声明镜像的创建者

  • ENV key value?? ??设置环境变量 (可以写多条)
  • RUN command?? ??是Dockerfile的核心部分(可以写多条)
  • ADD source_dir/file dest_dir/file?? ??将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
  • copY source_dir/file dest_dir/file 和ADD?? ??相似,但是如果有压缩文件并不能解压
  • workdir path_dir ?? ??设置工作目录

2) 使用步骤

① 创建目录

@H_498_26@mkdir -p /usr/local/dockerjdk11

?1@H_793_31@mkdir -p /usr/local/dockerjdk11②将jdk11包上传到 /usr/local/dockerjdk11③创建Dockerfile

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER BANGIAO
#切换工作目录
workdir /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-11.0.5_linux-x64_bin.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.5
ENV JRE_HOME $JAVA_HOME/jre
ENV CLAsspATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLAsspATH
ENV PATH $JAVA_HOME/bin:$PATH

?1

2

3

4@H_793_31@mAINTAINER BANGIAO5

6

7

8

9

10

11

12

13

14

15

④执行创建的dockerfile在创建Dokerfile的目录下面使用这个命令

docker build -t java11:11 .

?1

Docker私有仓库

私有仓库搭建与配置

(1)拉取私有仓库镜像(此步省略)

docker pull registry

(2)启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

(3)打开浏览器 输入地址http://192.168.184.141:5000/v2/_catalog看到{"repositories":[]}?表示私有仓库搭建成功并且内容为空

(4)修改daemon.json

vi /etc/docker/daemon.json

添加以下内容,保存退出。

{"insecure-regiStries":["192.168.184.141:5000"]} 

此步用于让 docker信任私有仓库地址

(5)重启docker 服务

systemctl restart docker

镜像上传至私有仓库

(1)标记此镜像为私有仓库的镜像

docker tag jdk1.8 192.168.184.141:5000/jdk1.8

(2)再次启动私服容器

docker start registry

(3)上传标记的镜像

docker push 192.168.184.141:5000/jdk1.8

(6) Docker Compose

1) 是什么?

用于定义和运行多个容器的应用程序的工具, 使用ymL文件来配置应用程序需要的所有容器环境

2) 使用docker compose搭建zookpeer集群

①安装docker compose?

$ sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

?1

2

3

安装版本

docker-compose -version

?1

或者使用 pip 安装②创建docker-compose文件

这里我就在 /opt 目录下新建了一个 zookeeper 目录(你也可以自定义存储目录),如下图:

在当前目录(/opt/zookeeper/)创建一个名为 docker-compose.yml 的文件, 其内容如下:

version: '2'
services:
    zoo1:
        image: zookeeper
        restart: always
        container_name: zoo1
        ports:
            - "2181:2181"
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo2:
        image: zookeeper
        restart: always
        container_name: zoo2
        ports:
            - "2182:2181"
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

    zoo3:
        image: zookeeper
        restart: always
        container_name: zoo3
        ports:
            - "2183:2181"
        environment:
            ZOO_MY_ID: 3
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888

?1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

3) 运行 docker-compose

接着我们在 docker-compose.yml 所在的目录(/opt/zookeeper/ )下运行:

COMPOSE_PROjeCt_name=zk_cluster docker-compose up

即可启动 ZK 集群了。

注意:这种方式非后台运行,当执行 Ctrl + C 组合键的时候,所有的ZK容器都会停止运行。

4) 以后台方式运行docker-compose

COMPOSE_PROjeCt_name=zk_cluster docker-compose up -d

运行效果如下图:

5) 查看启动的ZK集群

执行上述命令成功后,接着新开启一个终端,然后在新终端界面中,首先进入 /opt/zookeeper/ 目录,在该目录下运行以下命令可以查看启动的 ZK 容器:

COMPOSE_PROjeCt_name=zk_cluster docker-compose ps

如下图:

你也可以通过 docker ps 命令查看启动的ZK容器列表,如下图:

6) 测试连接ZK集群

通过上面的图,可以看到3个ZK容器的ID信息。

这里我们先进入zoo1这个容器,查看ZK的信息,执行以下命令:

docker exec -it 49 zkServer.sh status

运行结果如下图:

以此类推,查看 zoo2 这个ZK容器的信息

查看 zoo3 这个ZK容器的信息

经过以上的查看,可以清晰的看到,其中一个ZK容器是一个主节点leader,另外2个都是从节点follower。

到此,在Docker中搭建zookeeper的集群环境已经讲解完了。

问题总汇:(1) docker MysqL 连接出现 Authentication plugin ‘caching_sha2_password’ cAnnot be loaded原因:?

我在使用Navicat 进行MysqL管理是出现了。2059 – authentication plugin ‘caching_sha2_password’ -navicat连接异常。这个错误。

这个错误的原因是由于MysqL8.0之后的加密规则为caching_sha2_password.而在此之前的加密规则为MysqL_native_password。

可以将加密规则改成MysqL_native_password来。

来源:?https://blog.csdn.net/Kaishizige/article/details/82938976

解决方案:

1.进入MysqL容器docker exec -it MysqL2 /bin/bash2.进入MysqLMysqL -uroot -pmima3.修改密码ALTER USER ‘root’@’%’ IDENTIFIED WITH MysqL_native_password BY ‘root’;

来自为知笔记(Wiz)





本站总结

以上是本站教程为你收集整理的[心得]docker学习笔记全部内容,希望文章能够帮你解决[心得]docker学习笔记所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。