docker
# 概述
传说 go 语言天生支持高并发(执行速度接近C,网络服务接近Nginx)。
Golang实现了 CSP 并发模型做为并发基础,底层使用goroutine做为并发实体,goroutine非常轻量级可以创建几十万个实体。实体间通过 channel 继续匿名消息传递使之解耦,在语言层面实现了自动调度,这样屏蔽了很多内部细节,对外提供简单的语法关键字,大大简化了并发编程的思维转换和管理线程的复杂性。
一句话总结:go语言在设计的时候从关键字层面实现了多协程开发,好像语言天生支持高并发一样。
Docker采用的是Go语言编写的,该语言一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,常用于Web程序开发,并且具有成熟的Web开发框架,如Beego、Gin、Iris等等。
# docker 命令
docker 命令可以通过 --help 进行查看,比如docker --help
、docker run --help
等
docker version
查看docker版本信息docker info
查看系统信息,包括当前系统 docker 镜像和容器的数量docker images
查看已下载镜像docker search <镜像名>
从中央仓库搜索镜像docker pull 镜像名<:tags>
从仓库拉取。比如下载Tomcat 8.0 镜像:docker pull tomcat:8.0
删除镜像
docker rmi repository<:tag>
# 根据名称和版本删除,如果不指定tag,默认是lastestdocker rmi IMAGE_ID
# 根据镜像id删除docker rmi IMAGE_ID1 IMAGE_ID2 ...
# 批量删除
docker run <参数> 镜像id|镜像名称
运行(从镜像到容器)
参数:- --name: 为启动容器指定一个名字,注意有两个 --。
- -d:表示以后台方式运行,并返回容器ID。
- -i:以交互模式运行容器。
- -t:为容器重新分配一个伪输入终端。
- -p:主机端口:容器端口 | 容器端口 | ip:主机端口:容器端口。
- -P:随机端口映射,容器内部端口随机映射到主机端口。
- --link=[]:添加链接到另一个容器。
比如:
docker run -itd --name MyCentos7 centos:7
、docker run --rm -it --cap-add SYS_ADMIN MyCentos7 sh
、docker run -d -p 8888:8888 sqlflow/sqlflow:latest
进入容器
docker run -it [镜像id|镜像名] /bin/bash
使用run方式在创建时进入docker attach --sig-proxy=false 容器名称|容器ID
使用 attach 命令,进入已启动的容器
直接进入 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
docker exec -it 容器名称|容器ID /bin/bash
使用 exec 命令,进入已启动的容器(进入容器后开启一个新的终端,可以在里面进行操作)
查看所有运行的容器
docker ps
查看正在运行的容器docker ps -q
查看正在运行的容器的IDdocker ps -a
查看正在运行+历史运行过的容器docker ps -s
显示运行容器总文件大小
停止与删除容器
docker stop 容器名|容器id
停止一个运行中的容器docker kill 容器名|容器id
杀掉一个运行中的容器docker rm 容器名|容器id
删除一个已停止的容器docker rm -f 容器名|容器id
删除一个运行中的容器
docker logs <参数>容器名|容器id
查看容器日志
参数:- -f 跟踪日志输出
- -t:显示时间戳
- --tail N:仅列出最后N条日志
docker top 容器ID|容器名
查看容器内进程docker inspect 容器ID|容器名
查看容器信息主机和容器之间数据复制
docker cp 容器名|容器ID:/[container_path] [local_path]
将容器中的文件copy至本地路径docker cp [local_path] 容器名|容器ID:/[container_path]
将主机文件copy至容器docker cp [local_path] rabbitmq:/[container_path]
将主机文件copy至容器,目录重命名为[container_path](注意与非重命名copy的区别)
容器打包镜像,提交仓库
docker commit -a "作者" -m "简要说明" 容器ID 想要打包成的镜像名称:版本号
将容器打包成镜像- 去docker官网(https://hub.docker.com/)注册账号,并且建立仓库
docker login
从Linux登录,输入用户名密码docker tag 本地的镜像名 docker用户名/远程仓库名
设置镜像标签docker push docker用户名/远程仓库名
推送(上传)镜像
# 其他
- Docker-Compose 学习
- DockerFile 学习
- 网络隔离、独立IP设置(使Docker容器拥有可被宿主机以外的机器直接访问的独立IP)、网桥命名空间、创建网桥
- pipework 网络工具使用(打通容器间的网络)
点击查看
#停止docker
systemctl stop docker
#docker0
ip link set dev docker0 down
#删除docker0网桥
brctl delbr docker0
#新增一个docker0网桥
brctl addbr docker0
#增加网卡(这里ip也完全使用这个)
ip addr add 172.16.10.0/24 dev docker0
#启用网卡
ip link set dev docker0 up
#重启docker服务
systemctl restart docker
# 安装docker(阿里云)
# 卸载原来安装的Docker
查看当前docker状态
systemctl status docker
如果是运行状态则停掉
systemctl stop docker
查看yum安装的docker文件包
yum list installed |grep docker
查看docker相关的rpm源文件
rpm -qa |grep docker
删除所有安装的docker文件包
yum -y remove docker.x86_64
删除docker的镜像文件,默认在/var/lib/docker目录下
# 安装DockerCE
Docker有两个分支版本:Docker CE和Docker EE,即社区版和企业版。本教程基于CentOS 7安装Docker CE。
安装Docker的依赖库。
yum install -y yum-utils device-mapper-persistent-data lvm2
添加Docker CE的软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker CE
yum makecache fast
yum -y install docker-ce
- 启动Docker服务
systemctl start docker
# 配置镜像
Docker的默认官方远程仓库是hub.docker.com,由于网络原因,下载一个Docker官方镜像可能会需要很长的时间,甚至下载失败。为此,阿里云容器镜像服务ACR提供了官方的镜像站点,从而加速官方镜像的下载。下面介绍如何使用阿里云镜像仓库。
将下面命令中的镜像仓库地址https://kqh8****.mirror.aliyuncs.com替换为阿里云为您提供的专属镜像加速地址。
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://kqh8****.mirror.aliyuncs.com"]
}
EOF
重新加载服务配置文件。
systemctl daemon-reload
重启Docker服务
systemctl restart docker
# 使用Docker安装Nginx服务
- 查看Docker镜像仓库中Nginx的可用版本。
docker search nginx
- 拉取最新版的Nginx镜像。
docker pull nginx:latest
- 查看本地镜像
docker images
- 运行容器
docker run --name nginx-test -p 8080:80 -d nginx
命令参数说明:
--name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地8080端口映射到容器内部的80端口。
-d nginx: 设置容器在后台一直运行。
- 在浏览器地址栏输入http://<ECS公网地址>:8080访问Nginx服务
# 搭建Hadoop
下载centos镜像
docker pull centos
后创建一个容器准备安装jdk、hadoop作为基础版本
docker run -it --name hadoop101 -h hadoop 5d0da3dc9764 bash
安装一下vim(好像安装了其他基础东西)
yum install vim
Failed to set locale, defaulting to C.UTF-8
CentOS Linux 8 - AppStream 2.6 MB/s | 8.1 MB 00:03
CentOS Linux 8 - BaseOS 115 kB/s | 3.5 MB 00:31
CentOS Linux 8 - Extras
yum install openssh-server
yum install rsync
yum install iputils-ping
yum install net-tools ifconfig
[root@hadoop opt]# mkdir /opt/modules
[root@hadoop opt]# mkdir /opt/softwares
重启已停止的容器
[root@banana software]# docker ps -a
[root@banana software]# docker start hadoop101
拷贝进容器
docker cp ./env.tar.gz hadoop101:/opt/softwares
进入容器
docker exec -it hadoop101 /bin/bash
容器内解压
[root@hadoop softwares]# tar -zxvf env.tar.gz -C /opt/modules/
[root@hadoop modules]# vim /root/.bashrc
[root@hadoop modules]# source /root/.bashrc
[root@hadoop modules]# echo $JAVA_HOME
容器转为镜像
复制镜像
docker export hadoop_base > hadoop_base.tar导出容器
docker import hadoop_base.tar hadoop导入容器为新的hadoop镜像
docker images查看一下现在有的镜像
启动三个容器作为hadoop集群
docker run -it -p 50070:50070 --name hadoop102 -h hadoop102 hadoop101 bash
docker run -it -p 8088:8088 --name hadoop103 -h hadoop103 hadoop101 bash
docker run -it --name hadoop104 -h hadoop104 hadoop101 bash
vim /etc/hosts
172.17.0.2 hadoop102
172.17.0.3 hadoop103
172.17.0.4 hadoop104
修改完主机映射 互相ping一下查看是否网络互通
配置免密登录
ssh-keygen -t rsa # 生成密钥公钥
公钥发送到免密登录的机器上 之前ssh没安装上?(yum -y install openssh-clients)
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104