[心得]docker学习笔记
1. docker是什么???

2. 为什么使用docker? (docker有什么优点)
用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。
不用关系开发者环境和测试环境还有线上环境不同而出现bug的原因
使用docker的话, 它是跨平台的, 只要在一个平台做好, 其他平台都可以一键使用, 做到项目的 开发, 测试, 上线 都是一个配置
docker鼓励使用者在一个容器中开启一个微服务
3. 怎么用docker?
(0) 启动docker
systemctl start docker
systemctl start docker
(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
[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
- 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]
[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]
- 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
[root@bogon docker]# docker pull indigo/centos-maven
Using default tag: latest
latest: Pulling from indigo/centos-maven
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
[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
查看所有创建好的容器
[root@bogon docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb30bc08bd70 mysql "docker-entrypoint.s…" 19 minutes ago Up 13 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp docker_mysql
[root@bogon docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bb30bc08bd70 mysql "docker-entrypoint.s…" 19 minutes ago Up 13 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp docker_mysql
查看停止的容器
[root@bogon docker]# docker ps -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@bogon docker]# docker ps -f status=exited
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
查看最后一次运行的容器
[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
[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
查看容器的ip
我们可以通过以下命令查看容器运行的各种数据
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 run的端口和文件映射方式

docker cp nginx:/etc/nginx/nginx.conf nginx.conf







改
关闭容器
docker stop 容器名称(或者容器ID)
启动容器
docker start 容器名称(或者容器ID)
删
删除指定的容器
docker rm 容器名称(容器ID)
docker查看容器启动失败日志
(3)应用部署
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) 迁移和备份
[root@bogon ~]# docker commit docker_mysql
sha256:0228934f2164ee17ec6eda85f525f3628a842b0ba3ea8e85a2a3e4f440e17550
[root@bogon ~]# docker commit docker_mysql
sha256:0228934f2164ee17ec6eda85f525f3628a842b0ba3ea8e85a2a3e4f440e17550
google/cadvisor latest eb1210707573 12 months ago 69.6MB
google/cadvisor latest eb1210707573 12 months ago 69.6MB
[root@bogon ~]# docker save -o google_cadvisor.tar google/cadvisor:latest
[root@bogon ~]# docker save -o google_cadvisor.tar google/cadvisor:latest
[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
[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
(5) Dockerfile -- 这个跟MakeFile很像
(1) 是什么?
(2) 为什么使用它?
(3) 怎么用?
1) 常用命令
- FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
- 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) 使用步骤
mkdir -p /usr/local/dockerjdk11
mkdir -p /usr/local/dockerjdk11
#依赖镜像名称和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
#依赖镜像名称和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
docker build -t java11:11 .
docker build -t java11:11 .
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) 是什么?
2) 使用docker compose搭建zookpeer集群
$ 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
$ 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
docker-compose -version
docker-compose -version
这里我就在 /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
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
这个配置文件会告诉 Docker 分别运行三个 zookeeper 镜像, 并分别将本地的 2181, 2182, 2183 端口绑定到对应的容器的2181端口上(每个zookeeper容器的默认端口都是2181,这句话意思也就是说,将宿主机的2181、2182、2183这3个端口号,分别映射到3个zookeeper容器的2181端口)。
ZOO_MY_ID 和 ZOO_SERVERS 是搭建 ZK 集群需要设置的两个环境变量,其中 ZOO_MY_ID 表示 ZK 服务的 id,它是1-255 之间的整数,必须在集群中唯一;ZOO_SERVERS 是ZK 集群的主机列表。
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
很简单,只要在最后面加上“-d”即可。
运行效果如下图:

可以看到,是以后台方式运行的ZK容器集群。
5) 查看启动的ZK集群
执行上述命令成功后,接着新开启一个终端,然后在新终端界面中,首先进入 /opt/zookeeper/ 目录,在该目录下运行以下命令可以查看启动的 ZK 容器:
COMPOSE_PROJECT_NAME=zk_cluster docker-compose ps
如下图:

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

很明显的看到,启动了3个ZK容器,每个容器对应着宿主机的不同的端口号。
6) 测试连接ZK集群
查看ZK集群的信息,有多种方法。这里我们就使用最普通的进入容器内部来查看ZK节点的信息以及它的模式。
通过上面的图,可以看到3个ZK容器的ID信息。
这里我们先进入zoo1这个容器,查看ZK的信息,执行以下命令:
docker exec -it 49 zkServer.sh status
其中“49”指的是zoo1容器的ID。
运行结果如下图:

可以看到,Mode的值为“follower”,指的是从节点,并非主节点。
以此类推,查看 zoo2 这个ZK容器的信息:

当前ZK容器节点为主节点
查看 zoo3 这个ZK容器的信息:

当前ZK容器节点为从节点
经过以上的查看,可以清晰的看到,其中一个ZK容器是一个主节点leader,另外2个都是从节点follower。
到此,在Docker中搭建zookeeper的集群环境已经讲解完了。
我在使用navicat 进行MySQL管理是出现了。2059 - authentication plugin 'caching_sha2_password' -navicat连接异常。这个错误。
这个错误的原因是由于MySQL8.0之后的加密规则为caching_sha2_password.而在此之前的加密规则为mysql_native_password。
可以将加密规则改成mysql_native_password来。
1.进入mysql容器docker exec -it mysql2 /bin/bash2.进入mysqlmysql -uroot -pmima3.修改密码ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
[心得]docker学习笔记的更多相关文章
- Docker学习笔记 — Docker私有仓库搭建
Docker学习笔记 — Docker私有仓库搭建 目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2 和Mavan的管理一样,Dockers ...
- Docker学习笔记 — 配置国内免费registry mirror
Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- docker学习笔记(一)—— ubuntu16.04下安装docker
docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- docker学习笔记二:常用命令
docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...
随机推荐
- ssh安全优化免密登陆
ssh协议 为什么使用ssh协议? 在进行传输时,会对数据进行加密,保证会话安全:telnet协议不是加密传输,在传输过程中如果被抓包,就会造成信息泄露,telnet默认不支持root远程. # 常用 ...
- shell基础之for循环语句
For语句 格式:for name [ [ in [ word ... ] ] ; ] do list ; done for 变量名 in 取值列表; do 命令 done 或者 for 变量名 in ...
- C++编程计算图形的面积(圆、矩形)
C++基础,while循环与if判断实现的计算图形面积 1 #include <iostream> 2 3 int main() { 4 while (true){ 5 int input ...
- macOS Big Sur 11.3 (20E232) 正式版发布,百度网盘下载
本站提供的 macOS Big Sur 软件包,即可以直接拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者直接在虚拟机中启动安装. 请访问原文链接:https: ...
- Linux(CentOS7)下二进制安装MySQL5.7.26
记录一下自己在 CentOS7 下二进制安装 MySQL5.7.26 的过程,之前使用 Linux(CentOS7)下rpm安装MySQL8.0.16 之后发现 rpm 方式安装不利于维护,也不利于单 ...
- 201871030138-杨蕊媛 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh ...
- 设计模式Immutability
1.什么是Immutability Immutability,不变性, 叫做不变性设计模式,简单来说就是对象一旦创建,状态就不再发生变化. 变量一旦被赋值,就不允许修改了(没有写操作):没有修改操作, ...
- 摄像头ISP系统原理(下)
摄像头ISP系统原理(下) l WDR(Wide Dynamic Range)------宽动态 动态范围(Dynamic Range)是指摄像机支持的最大输出信号和最小输出信号的比值,或者说图像最 ...
- CVPR2020论文解读:手绘草图卷积网络语义分割
CVPR2020论文解读:手绘草图卷积网络语义分割 Sketch GCN: Semantic Sketch Segmentation with Graph Convolutional Networks ...
- 无监督域对抗算法:ICCV2019论文解析
无监督域对抗算法:ICCV2019论文解析 Drop to Adapt: Learning Discriminative Features for Unsupervised Domain Adapta ...