Info moby、docker-ce与docker-ee 最早的时候docker就是一个开源项目,主要由docker公司维护。
2017年年初,docker公司将原先的docker项目改名为moby,并创建了docker-ce和docker-ee。
这三者的关系是:
moby是继承了原先的docker的项目,是社区维护的的开源项目,谁都可以在moby的基础打造自己的容器产品
docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品 docker-ee是docker公司维护的闭源产品,是docker公司的商业产品。
install moby: yum install docker
docker-ce: curl -fsSL https://get.docker.com/ | sh
国内加速registry-mirrors Docker Engine配置 /etc/docker/daemon.json
1 2 3 4 "registry-mirrors": [ "http://hub-mirror.c.163.com", "https://registry.docker-cn.com" ]
https://hub.daocloud.io/
免sudo运行 问题:
默认安装完 docker 后,每次执行 docker 都需要运行 sudo 命令,非常浪费时间影响效率
解决方案:
将用户加入该docker的group内,重新打开终端。 Add the connected user “${USER}” to the docker group.
1 2 sudo gpasswd -a ${USER} docker sudo service docker restart
windows hyper-v 与安卓模拟器(夜神、mumu)冲突,考虑关闭hyper-v,虚拟机装linux用docker
mumu模拟器X版本兼容hyper-v
容器内网络问题 问题:
Docker Daemon默认给Docker Container的DNS设置为8.8.8.8和8.8.4.4,但在国内这两个DNS服务不稳定,由此影响到网络。
解决方案:
临时方案:使用docker run命令启动容器的时候,设定–dns参数,如:
1 docker run -it --dns=172.20.1.4 ubuntu
全局修改:以上临时方案仅适用于docker run命令,docker build因为没有dns参数所以不能效仿。
编辑/etc/default/docker
添加–dns参数到Docker Daemon的DOCKER_OPTS
。
1 2 3 4 sudo vi /etc/default/docker # 末尾添加 DOCKER_OPTS="--dns 172.20.1.4" sudo service docker stop sudo service docker start
慎用latest标签 latest
并不是永久赋予某一特定Docker镜像的标签,在t1使用latest
镜像,应用容器运行正常;t2使用同一个Dockerfile
来build镜像再运行应用容器,失效。 比如t1时ubuntu镜像的latest
标签于ubuntu:14.04
,t2时该latest标签属于ubuntu:16.04
。因此Docker镜像建议使用指定的tag
docker建wordpress 1 2 docker run --name wp-mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 docker run --name my-wordpress --link wp-mysql:mysql -p 8080:80 -d -e WORDPRESS_DB_PASSWORD=root wordpress
常用命令 镜像管理
docker search ubuntu 搜索镜像
docker pull ubuntu:1604 获取指定版本镜像
docker images 列出本地所有镜像
docker rmi ubuntu:1604 删除镜像
docker build -t nginx:v3 . 使用Dockerfile构建镜像,并指定标签
docker history nginx:v2 查看镜像历史
容器运行
docker run ubuntu:1604 创建并运行一个容器
docker run 其他参数
-name testContainer 指定容器名称
-p 80:80 指定端口映射
-P 随机端口,可通过docker port ID/name
查看
-it 交互
-d 后台运行,可通过docker attach ID/name
连接容器
-v 主机目录:容器目录 主机目录必须是绝对路径,如果不存在docker自动创建
容器管理
docker info
docker ps -a 查看所有容器
docker rm $(docker ps -a -q) 删除所有容器
docker start ID/name
docker stop ID/name
docker attach ID/name
进入容器正在执行的终端,不开启新进程
docker exec -it 容器id bashshell 进入容器后开启新的终端,可进行操作
docker logs ID/name
docker logs -f ID/name
持续日志流
docker diff ID/name
查看容器变化
docker commit –author manhua
–message 修改了默认网页
ID/name
nginx:v2
将容器保存为image
exit 退出容器
ctrl+P+Q 退出不停止
docker inspect | grep IPAddress 查看ip
通过Dockerfile创建镜像 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 说明该镜像以哪个镜像为基础 FROM centos:latest # 构建者的基本信息 MAINTAINER manhua # 在build这个镜像时执行的操作 RUN yum update RUN yum install -y git # 拷贝本地文件到镜像中 COPY ./* /usr/share/gitdir/
docker build -t=”manhua/centos:gitdir” . 其中-t用来指定新镜像的用户信息、tag等。最后的点表示在当前目录寻找Dockerfile。 docker build -f .\maven.txt -t “manhua/building” .
FROM基础镜像,DockerHub中99%的镜像都是FROM scratch MAINTAINER镜像是谁写的,姓名+邮箱 RUN运行命令 ADD添加内容,可解压tar包(不同于COPY的地方) WORKDIR镜像工作目录 VOLUME挂载的目录 EXPOSE指定暴露端口(同-P指令) CMD指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行,可被替代。 ENTRYPOINT如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。ENTRYPOINT可追加命令。每个 Dockerfile 中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。 ONBUILD当构建一个被继承DockerFile这个时候就会运行ONBUILD指令。触发指令 COPY类似ADD,将我们的文件拷贝到镜像中ENV构建时设置环境变量
Docker Compose 用于定义和运行多容器 Docker 的应用程序工具 docker-compose -v
Windows环境下的使用 安装 https://docs.docker.com/get-docker/ https://hub.docker.com/
新版建议使用基于WSL2,使用异常会涉及以下命令: wsl –install wsl –update wsl –set-version 2 wsl –status wsl –version wsl –shutdown wsl –unregister docker-desktop-data wsl –terminate wsl –list –verbose wsl –distribution
配置 常用环境 mysql <– metastore metastore <– HDFS metastore <– Spark HDFS <– Spark
HDFS和metastore建议捆绑,因为metastore需要HADOOP_HOME
mysql 1 docker run -di --name mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
hive Dockerfile
docker pull centos:7
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 FROM centos:7 RUN yum install -y wget java-1.8.0-openjdk-devel && yum clean all WORKDIR /install RUN yum install -y ca-certificates && yum clean all # RUN wget https://dlcdn.apache.org/hive/hive-standalone-metastore-3.0.0/hive-standalone-metastore-3.0.0-bin.tar.gz COPY hive-standalone-metastore-3.0.0-bin.tar.gz hive-standalone-metastore-3.0.0-bin.tar.gz RUN tar zxf hive-standalone-metastore-3.0.0-bin.tar.gz RUN rm -f hive-standalone-metastore-3.0.0-bin.tar.gz RUN mv apache-hive-metastore-3.0.0-bin metastore # RUN wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.49.tar.gz COPY mysql-connector-java-5.1.49.tar.gz mysql-connector-java-5.1.49.tar.gz RUN tar xf mysql-connector-java-5.1.49.tar.gz --strip-components=1 -C ./metastore/lib mysql-connector-java-5.1.49/mysql-connector-java-5.1.49.jar RUN rm mysql-connector-java-5.1.49.tar.gz # RUN wget http://${HTTP_SERVER_HOSTNAME}/downloads/hadoop-3.2.2.tar.gz COPY hadoop-3.3.6.tar.gz hadoop-3.3.6.tar.gz RUN tar xf hadoop-3.3.6.tar.gz RUN rm -f hadoop-3.3.6.tar.gz ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk ENV HADOOP_HOME=/install/hadoop-3.3.6 COPY metastore-site.xml /install/metastore/conf/ RUN ./metastore/bin/schematool -initSchema -dbType mysql CMD ["/install/metastore/bin/start-metastore"]
metastore-site.xml 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 33 34 35 36 37 38 39 40 41 42 43 44 <?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml-stylesheet type="text/xsl" href="configuration.xsl" ?> <configuration > <property > <name > metastore.thrift.uris</name > <value > thrift://localhost:9083</value > </property > <property > <name > metastore.warehouse.dir</name > <value > hdfs://192.168.56.112:9000/hive</value > </property > <property > <name > javax.jdo.option.ConnectionURL</name > <value > jdbc:mysql://ip:3306/hive?createDatabaseIfNotExist=true& characterEncoding=UTF-8& useSSL=false& allowPublicKeyRetrieval=true</value > </property > <property > <name > javax.jdo.option.ConnectionDriverName</name > <value > com.mysql.jdbc.Driver</value > </property > <property > <name > javax.jdo.option.ConnectionUserName</name > <value > root</value > </property > <property > <name > javax.jdo.option.ConnectionPassword</name > <value > 123456</value > </property > <property > <name > hive.metastore.schema.verification</name > <value > false</value > </property > <property > <name > datanucleus.schema.autoCreateAll</name > <value > true</value > </property > <property > <name > metastore.task.threads.always</name > <value > org.apache.hadoop.hive.metastore.events.EventCleanerTask</value > </property > <property > <name > metastore.expression.proxy</name > <value > org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy</value > </property > </configuration >
注意IP由docker network inspect bridge
docker inspect <MySQL CONTAINER ID> |grep IPAddress
获得
docker build -t manhua_hivemeta:v1 .
docker run -d -p 9083:9083/tcp –add-host=host.docker.internal:host-gateway –name hivemeta manhua_hivemeta:v1
编译环境 bash脚本
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 docker pull ubuntu docker run --name dev -h dev -it ubuntu docker attach dev sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/' /etc/apt/sources.list apt-get update apt-get install -y vim apt-get install -y less apt-get install -y git apt-get install -y wget INSTALL_PATH=/data/soft mkdir -p $INSTALL_PATH cd $INSTALL_PATH wget https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz binJDK=jdk-8u202-linux-x64.tar.gz tar -xf ${binJDK} -C $INSTALL_PATH folder=`tar -tf ${binJDK} |head -1` echo $folder pushd $INSTALL_PATH ln -s $folder jdk popd echo -e '\n\n#Java' >> /etc/profile echo 'export JAVA_HOME='${INSTALL_PATH}'/jdk' >> /etc/profile echo 'export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH' >> /etc/profile echo 'export CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib' >> /etc/profile source /etc/profile java -version && rm jdk-8u202-linux-x64.tar.gz wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz binMvn=apache-maven-3.8.8-bin.tar.gz tar -xf ${binMvn} -C $INSTALL_PATH echo -e '\n\n#MVN' >> /etc/profile echo 'export MVN_HOME='${INSTALL_PATH}'/apache-maven-3.8.8' >> /etc/profile echo 'export PATH=$MVN_HOME/bin:$PATH' >> /etc/profile source /etc/profile mvn -v && rm apache-maven-3.8.8-bin.tar.gz vi apache-maven-3.8.8/conf/settings.xml >> thrift部分可以跳过 =>> 使用正式版,不编译format模块 apt-get install -y automake bison flex g++ git libboost-all-dev libevent-dev libssl-dev libtool make pkg-config wget https://dlcdn.apache.org/thrift/0.18.1/thrift-0.18.1.tar.gz srcThrift=thrift-0.18.1.tar.gz tar -xf ${srcThrift} folder=`tar -tf ${srcThrift} |head -1` echo $folder pushd $folder ./configure --help ./configure --without-python make -j4 && make install popd thrift -version mkdir -p /data/code/ docker commit git-maven git-maven:v0
实例使用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 docker run --name carbon-dev -h carbon-dev -it git-maven:v0 cd /data/code/ git clone --depth 1 https://github.com/apache/carbondata.git cd carbondata git remote update origin --prune git branch git checkout -b dev(本地分支名) origin/xxBranch git tag git checkout -b 本地分支 远程tag git checkout -b 2.3.0 apache-carbondata-2.3.0-rc2 git remote add github https://github.com/apache/carbondata.git git remote update github --prune commit id cd carbondata/ mvn clean -DskipTests -T4 -Pspark-3.1 package 使用visual studio code可以直接attach到运行中的容器修改代码
Hive服务 – 挂起,可以直连mysql代替 1 2 3 4 5 6 7 8 docker run --name hive -h hive -it manhua/mvn ## 尝试meta standalone docker cp hive-standalone-metastore-3.0.0-bin.tar.gz hive:/data/soft/ docker cp apache-hive-3.1.3-bin.tar.gz hive:/data/soft/ docker cp mysql-connector-java-5.1.47.jar hive:/data/soft
Hadoop - 参考并结合编译环境 复制文件到容器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CMD set INSTALL_PATH=/data/soft echo %INSTALL_PATH% PowerShell $INSTALL_PATH="/data/soft" $INSTALL_PATH docker cp jdk-8u202-linux-x64.tar.gz hadoop1:$INSTALL_PATH docker cp apache-hive-3.1.3-bin.tar.gz hadoop1:$INSTALL_PATH docker cp hive-standalone-metastore-3.0.0-bin.tar.gz hadoop1:$INSTALL_PATH docker cp hadoop-3.3.1.tar.gz hadoop1:$INSTALL_PATH docker cp spark-3.3.1-bin-hadoop2.tgz hadoop1:$INSTALL_PATH #docker cp apache-zookeeper-3.7.1-bin.tar.gz hadoop1:$INSTALL_PATH docker cp mysql-connector-java-5.1.47.jar hadoop1:$INSTALL_PATH
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 33 34 35 docker network create --subnet=172.10.0.0/16 hadoop-net docker run --name hadoop1 --net hadoop-net --ip 172.10.0.2 -h hadoop1 --add-host hadoop2:172.10.0.3 -it manhua/mvn #安装基础软件 apt-get update apt-get install -y vim net-tools ssh systemctl #ssh需要创建个目录 mkdir -p /run/sshd systemctl enable ssh systemctl start ssh ssh-keygen -t rsa -P "" cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh root@hadoop1 tar -xf hadoop-3.3.1.tar.gz ln -s hadoop-3.3.1 hadoop vim hadoop/etc/hadoop/slaves hadoop1 hadoop2 tar -xf spark-3.3.1-bin-hadoop2.tgz ln -s spark-3.3.1-bin-hadoop2 spark #提交cloud1容器,命令返回新镜像的编号 #为新镜像打标签为Spark docker commit hadoop1 hadoop:v0 #删除原来的hadoop1容器,重新创建 docker stop hadoop1 docker rm hadoop1
多台部署
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 # 50070 端口 # 8088 端口 # 7077 端口 spark # 9000 端口 hdfs # 16010 端口 hbase # 2181 端口 zookeeper # 10000 端口 hive server docker run --name hadoop1 \ -p 50070:50070 \ -p 8088:8088 \ -p 8080:8080 \ -p 7077:7077 \ -p 9000:9000 \ -p 16010:16010 \ -p 2181:2181 \ -p 10000:10000 \ --net spark-net --ip 172.10.0.2 \ -h hadoop1 \ --add-host hadoop1:172.10.0.2 \ --add-host hadoop2:172.10.0.3 \ -it hadoop:v0 docker run --name hadoop2 \ --net spark-net --ip 172.10.0.3 \ -h hadoop2 \ --add-host hadoop1:172.10.0.2 \ --add-host hadoop2:172.10.0.3 \ -it hadoop:v0