一、Docker入门
举例:Window上面装了一个虚拟机,VM1、VM2、VM3都是linux系统;
CentOS7.X系统上可以装很多个docker,docker1、docker2、docker3;
在centos系统中,可以安装无数个进程,如:mysql、nginx、spark、http,容器只能运行一个http服务;镜像可以理解为centos中的镜像,容器可以理解为…
https://blog.csdn.net/zhikanjiani/article/details/101751647
1、7.X中的命令向下兼容,在6.X中也能使用
CentOS6.X中:
2、CentOS7.X
3、最显著的在CentOS7.X中,一条启动命令可以无限写下去:
4、docker分为两个版本,自身的版本的API的版本;有时候有可能是提示API的版本不够。
1、首先要把docker服务停止:
2、然后使用命令:
-rpm -qa|grep docker
[root@hadoop ~]# rpm -qa|grep docker
docker-ce-19.03.2-3.el7.x86_64
docker-ce-cli-19.03.2-3.el7.x86_64
3、卸载之前查看下docker在/var/lib目录下有哪些东西?
[root@hadoop ~]# ll /var/lib/docker
total 48
drwx------ 2 root root 4096 Sep 30 11:14 builder
drwx--x--x 4 root root 4096 Sep 30 11:14 buildkit
drwx------ 4 root root 4096 Sep 30 14:38 containers
drwx------ 3 root root 4096 Sep 30 11:14 image
drwxr-x--- 3 root root 4096 Sep 30 11:14 network
drwx------ 14 root root 4096 Sep 30 14:38 overlay2
drwx------ 4 root root 4096 Sep 30 11:14 plugins
drwx------ 2 root root 4096 Sep 30 11:14 runtimes
drwx------ 2 root root 4096 Sep 30 11:14 swarm
drwx------ 2 root root 4096 Sep 30 14:38 tmp
drwx------ 2 root root 4096 Sep 30 11:14 trust
drwx------ 2 root root 4096 Sep 30 11:14 volumes
4、卸载客户端和server端:
5、要完整的卸载还需要删除/var/lib/docker目录下的内容:
1、yum安装
2、使用service命令启动docker,相当于重定向:
[root@hadoop ~]# service docker start
Redirecting to /bin/systemctl start docker.service
自己制作的一些镜像放到公共的网站上,类似github;
我们自己部署的时候基本上都是去到这个网站上下载的。
search Search the Docker Hub for images 搜索docker hub上的镜像
pull Pull an image or a repository from a registry 从docker hub仓库拉取下来
push Push an image or a repository to a registry 上传到docker hub上去
第一步:去下载Nginx
第二步:
1、托管一些简单的静态内容(Hosting some simple static content)
2、查看运行中的容器实例
3、
1、
[root@hadoop ~]# docker run --name ruozedata-nginx-g6-1 -d -p 881:80 nginx
6fc3d0ae5c08363de7c3e9970614c3827e93ecbb737382a72671a527635b09a2
2、
[root@hadoop ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6fc3d0ae5c08 nginx "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:881->80/tcp ruozedata-nginx-g6-1
3、如何进入到容器实例里面:
命令:docker exec -it 6fc3d0ae5c08 /bin/bash
[root@hadoop ~]# docker exec -it 6fc3d0ae5c08 /bin/bash
root@6fc3d0ae5c08:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@6fc3d0ae5c08:/# pwd
/
2、此时暴露外部端口号:
1、创建目录:
2、rz,把在本地上传的ruozedata.html文件上传到linux系统:
3、mv ruozedata.html index.html
Nginx默认指向的是index.html文件
4、[root@hadoop001 nginx]# docker run --name ruozedata-nginx-g6-2 \
-d -p 882:80
-v $PWD/html:/usr/share/nginx/html:ro
nginx:latest
12660ae878e96a3707ecd8675130cee84ee32ff0017828f706eda4b036397735
5、查看状态:
[root@hadoop001 nginx]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12660ae878e9 nginx:latest "nginx -g 'daemon of鈥 46 seconds ago Up 45 seconds 0.0.0.0:882->80/tcp ruozedata-nginx-g6-2
e8c6dbf48259 nginx "nginx -g 'daemon of鈥 35 minutes ago Up 35 minutes 0.0.0.0:881->80/tcp ruozedata-nginx-g6-1
[root@hadoop001 nginx]#
6、浏览器上查看882端口是否正确:
我的按照提示操作直接报错的:403 forbidden
整个容器学习中最重要的是:制作生产、企业所需要的docker的image镜像,这才是占据了大部分工程师的工作量。
小结:Docker就是以进程的形式存在,一个容器中只能运行单个服务,运行了MySQL就不能运行HTTP.
1、docker search hello
2、docker pull hello-world
3、docker run hello-world
1、The Docker client contacted the Docker daemon.
2、 The Docker daemon pulled the “hello-world” image from the Docker Hub.
(amd64)
3、The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4、The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
J总公司:Nginx、HTTP、Tomcat这些服务都是以Docker来部署的,Docker上的MySQL是用与开发、测试人员测试使用。
虚拟机上直接部署MySQL和在虚拟机上部署Docker上再部署MySQL;相比多了一层网络转发,性能的折扣大抵减少了20%。
注意:公司中涉及存储的组件服务要上生产德华,是不能使用Docker的;qa需要MySQL库,直接给他Docker测试环境
常用命令:
1、docker images
[root@hadoop001 html]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f949e7d76d63 6 days ago 126MB
mysql 5.7 383867b75fd2 2 weeks ago 373MB
hello-world latest fce289e99eb9 9 months ago 1.84kB
[root@hadoop001 html]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest f949e7d76d63 6 days ago 126MB
mysql 5.7 383867b75fd2 2 weeks ago 373MB
hello-world latest fce289e99eb9 9 months ago 1.84kB
2、docker ps 显示的状态是up的,关闭的服务不显示
[root@hadoop001 html]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
12660ae878e9 nginx:latest "nginx -g 'daemon of鈥 About an hour ago Up About an hour 0.0.0.0:882->80/tcp ruozedata-nginx-g6-2
e8c6dbf48259 nginx "nginx -g 'daemon of鈥 2 hours ago Up 2 hours 0.0.0.0:881->80/tcp ruozedata-nginx-g6-1
3、docker ps -a 运行一次退出的也显示,有的组件服务一启动之后就会啪唧一下关了。
[root@hadoop001 html]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c48a1b1a959c hello-world "/hello" 33 minutes ago Exited (0) 33 minutes ago angry_gould
4a768541ce19 hello-world "/hello" 33 minutes ago Exited (0) 33 minutes ago wonderful_goldstine
12660ae878e9 nginx:latest "nginx -g 'daemon of鈥 About an hour ago Up About an hour 0.0.0.0:882->80/tcp ruozedata-nginx-g6-2
e8c6dbf48259 nginx "nginx -g 'daemon of鈥 2 hours ago Up 2 hours 0.0.0.0:881->80/tcp ruozedata-nginx-g6-1
684b77634b57 hello-world "/hello" 2 hours ago Exited (0) 2 hours ago
第一步:
[root@hadoop001 html]# docker run --name ruozedata-myqsl-g6-1 -e MYSQL_ROOT_PASSWORD=960210 -d mysql:5.7
2e86dd81f7f68823f6ec2101621189632d090abd5ea7794e07bce51939cf5d04
第二步:
1、重新取一个名字:
2、List containers:(列出容器)
[root@hadoop001 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6b326a89667 mysql:5.7 "docker-entrypoint.s鈥 12 seconds ago Up 11 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp ruozedata-mysql-g6-2
2e86dd81f7f6 mysql:5.7 "docker-entrypoint.s鈥 19 minutes ago Up 13 minutes 3306/tcp, 33060/tcp ruozedata-myqsl-g6-1
12660ae878e9 nginx:latest "nginx -g 'daemon of鈥 2 hours ago Up 2 hours 0.0.0.0:882->80/tcp ruozedata-nginx-g6-2
e8c6dbf48259 nginx "nginx -g 'daemon of鈥 2 hours ago Up 2 hours 0.0.0.0:881->80/tcp ruozedata-nginx-g6-1
3、监听3306端口号:
[root@hadoop001 ~]# netstat -nlp|grep 3306
tcp6 0 0 :::3306 :::* LISTEN 8262/docker-proxy
4、ps -ef|grep 8262
[root@hadoop001 ~]# ps -ef|grep 8262
root 8262 3396 0 14:41 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 3306 -container-ip 172.17.0.5 -container-port 3306
root 8532 7279 0 14:42 pts/3 00:00:00 grep --color=auto 8262
5、进入容器实例及进入MySQL
[root@hadoop001 ~]# docker exec -it e6b326a89667 /bin/bash
root@e6b326a89667:/# mysql -uroot -p960210
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
1、进入到数据库中:
create database ruozedata;
2、赋予所有权限给rz用户访问所有数据的所有权限,通过密码960210访问:
grant all privileges on *.* to rz@'%' identified by '960210';
3、刷新权限:
flush privileges;
把MySQL塞到Docker(一个进程中),MySQL的存储也能够正常映射,毕竟是映射,没有原生的那么好,所以生产上不建议使用Docker。
windows系统上装了很多个centos系统,centos系统中启动容器,就相当于又要启动无数个进程,所以最大的一个就是网络的消耗,一个转换差不多是20%;机器故障断电的话还会发现容器启动不起来。
小结:无论啥公司,使用到容器,它的核心是啥?
1、构建镜像的目的是减少重复的劳动力:
正常制作image的步骤:
1、From 基础镜像
MAINTAINER 维护者信息
RUN 镜像的Linux操作命令:对应创建文件夹,容器启动的时候对应一些初始化的动作
ENTRYPOINT 配置容器启动:真正容器的镜像实例叫做Container;这是配置容器启动后只需的命令,每个Dockerfile文件只能由一个ENTRYPOINT,当然也可以指定多个,只有最后一个生效。
EXPOSE 运行的哪个端口号;
CMD指的是要启动的进程:mysqld,启动进程服务
注意:千万不能用Docker跑CDH;Docker是轻量级的能运行在任何地方,CDH是一个重量级的环境,底层依赖的是java、python;目前炒作的最火的是K8s。
企业中炒作的多的是Spark on Kubernetes,我们的存储和计算在一块儿的,叫做数据本地化;
1、PROCESS_LOCAL(进程级别)
2、NODE_LOCAL(节点)
3、NO_PREF data
4、RACK_LOCAL(相同机架上的其它节点)
5、Any data is elsewhere on the network and hot in the same rack
绝大部分的大数据存储都是要依赖于HDFS的,无论是Hive、HBase都是要依赖于HDFS的。
在容器出来后,提倡存储和计算分开;今天的网络带宽消耗、及磁盘转速已经能弥补差别了。