Docker --镜像容器学习笔记
  DcICZeWmM6vw 2023年11月02日 28 0

Docker简介

准备工作

1. 前提知识
    - linux
    - Git
2. 课程定位和范围(基于JavaEE方向)
    - JavaEE  java  SpringMVC/springBoot/mybatis ...        docker基础篇
    - Docker  Go    Swarm/compose/machine/mesos/k8s/---CI/CD jenkinds整合 docker高级篇

是什么

1.问题:为什么会有docker出现
    - 解决开发与运维之间,因在“环境和配置”上的差异而产生的问题
    - 开发将(代码/配置/系统/数据...)一整套,整体打包复制过去
    - 软件带环境安装
2. docker理念
    - Build ,Ship and Run Any app,Anywhere
    - 一次构建处处运行:一次性配置好部环境,换环境直接署运行

3. 一句话
    - 解决了运行环境和配置问题的软件容器,方便做持续集成,并有助于整体发布的容器虚拟化技术
    - 标准统一的打包、部署、运行方案

能干嘛

1. 之前的虚拟机技术
    一个操作系统里面运行另一种操作系统。
    模拟一整套操作系统、硬件、软件

    缺点:资源占用多、冗余步骤多、启动慢

2. 容器虚拟化技术
    针对虚拟机技术,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩写LXC)。
    Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。

     比较Docker与传统虚拟化方式的不同之处:
        * 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上在运行所需应用进程。
        * 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
        * 每个容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区别计算资源。

3.  开发/运维(DevOps)开发自运维
    一次构建、随处运行
        更快速的应用交付和部署
        更便捷的升级和扩缩容
        更简单的系统运维
        更搞笑的计算资源利用

4. 企业级
    业界趋势
    使大规模动态调度成为可能
    更轻量、更高效、更敏捷、更灵活

去哪下

1. 官网
    docker.com
    docker-cn.com

2. 仓库(Docker Hub)
    hub.docker.com

Docker简介

前提说明

1. ContOS Docker安装
    CentOS 7(64-bit)
    CentOS 6.5(64-bit)或更高的版本
    系统内核版本为2.6.32-431或者更高版本

2. 版本查看指令:
    uname -r                 m   			内核版本查看指令
    cat /etc/redhat-release      			系统版本查看指令

Docker的基本组成

1. Docker的架构图
    * Client  --命令终端,类似于git
        docker build
        docker pull
        docker run

    * DOCKER_HOST  --服务端,类似于操作系统
        Docker Daemon  管理引擎,docker进程
            大管家

        Images镜像
            容器的模板
        Containers容器
            镜像的一个实例
            Docker利用容器独立运行一个或一组应用。容器是用镜像创建的运行实例。
            它可以被启动、开始、运行、删除。每个容器都是相互隔离的、保证安全的平台
            可看做一个简易版Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序(仅170m大小)

            容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

    * Registry  --仓库注册服务器,类似于github远程库
        repository镜像仓库
            集中存放image镜像的地方
            仓库(repository镜像仓库)和仓库注册服务器(Registry)是有区别的。
            仓库注册服务器往往存放着多个仓库,每个仓库中有包含了多个镜像,每个镜像有不同的标签(Tag)

            仓库分为公开库public和私有库private
                最大的公开库是Docker Hub
                存放了数量庞大的镜像供用户下载。国内公开库: 阿里云、网易云

安装步骤

1. CentOS 6.8安装Docker-io
    - Linux指令:
        * 安装依赖库:yum install -y epel-release
        * 安装docker:yum install -y docker-io
        * 安装后的配置文件(存在表示安装成功):/etc/sysconfig/docker
        * 启动Docker后台服务:service docker start
        * 版本查询:docker version 验证

2. CentOS 7安装Docker-ce
    文档查看:docs.docker.com/install/linux/docker-ce/centso/
    版本:
        社区办(CE),免费
        企业版(EE),收费

HelloWorld

1.配置加速器
    - 阿里云镜像加速:dev.aliyun.com 
       * 注册登录账户
       * 获得加速器地址(容器镜像服务、镜像库、镜像加速器)
       * 配置本机Docker运行镜像加速器(/etc/sysconfig/docker)6.5版本,修改默认配置,不使用Docker Hub镜像仓库
       * 重启本机Docker服务: service docker restart
       * 查看进程,检查是否生效: ps -ef |grep docker
    - 网易云加速

2. 启动Docker 后台容器
    docker run hello-world
        运行hello-world镜像
    run干了什么
        本机中寻找镜像
            有,生产实例运行
            没有,则在远程仓库中pull镜像
        远程仓库寻找镜像
            有,下载到本地,产生容器实例,运行容器
            没有,返回失败错误,查不到该镜像

底层原理

1.Docker是怎么工作的?
    - docker是一个client-service结构的系统,Docker守护进程运行在主机上,然后通过socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。
2.Docker为什么比虚拟机快?
    - docker有更少的抽象层:docker不需要硬件资源的虚拟化。
    - docker利用的是宿主的内核。因此当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。

Docker的常用指令

帮助命令

- docker version            				版本号查看
- docker info               				docker信息展示
- docker inspect							以json格式描述docker信息
- docker --help             				命令介绍,帮助手册

镜像命令

- docker images             				镜像列表
              	-a        					列出本地所有的镜像(含中间映像层)
              	-q        					只显示镜像ID
              	-qa       					列出本地所有的镜像ID
              	--digests 					显示镜像的摘要信息
          		--no-trunc    				显示完整的镜像信息

- docker search <name>                  	在docker hub查询name镜像
                --no-trunc      			显示完整的镜像描述
                -s <s>          			点赞数n以上的镜像
                --automated     			只列出automated build 类型的镜像,自动构建

- docker pull <name><:latest>               从远程仓库下载镜像

- docker rmi <name/no><:latest>             删除某个镜像
                -f                          强制删除单个
                -f  name1 name2             删除多个         
                -f  $(docker images -qa)    删除全部

- docker commit								提交容器副本是指成为一个新的镜像
				-m="提交的描述信息" -a="作者" <容器ID>  新镜像名:[标签版本编号]

容器命令 前提: 有镜像才能创建容器

- docker run images                     	新建并启动容器
                -i          				以交互模式运行容器,通常与-t同时使用     -it
                -t          				为统一重新分配一个伪输入终端,通常与-i同时使用
                --name (newName)   			为容器指定一个新名字
                -d              			后台运行容器,并返回容器ID,也即启动守护式容器
                -P              			大写p,随机端口映射
                -p              			小写p,指定端口映射

- docker ps         						列出所有正在运行的容器
             	-a     						正在运行的和历史上运行过的
             	-l     						上一次运行的容器
             	-n 3   						近3此运行的容器
             	-qa    						只显示容器ID,便于后面删除所有正在运行的容器
             	--no-trunc     				不截断输出

- exit              						容器停止退出,关闭容器并退出
- Ctrl+P+Q          						容器不停止退出

- docker start id/name      				启动容器

- docker restart id/name    				重启容器

- docker stop id/name       				停止容器

- docker docker kill id/name 强制停止容器

- docker rm id/name         				删除容器
            	-n 3            			删除最近的3个容器
            	-f $(docker ps  -q -a)      删除所有容器
- docker ps -a -q | xargs docker rm       	删除所有容器

- !!重要
- docker run -d <容器名>						开启守护式进程,后台运行
                    						docker ps -a 进行查看,发现容器已经退出
                    						说明了一个问题: Docker容器后台运行,必须有一个前台进程
                    						docker的一个机制,当启动的容器没有被使用时,会自动删除容器
                    						最佳解决方式: 将要运行的程序以前台进程的形式运行
                							eg: docker run -d centos /bin/bash -c "while true; do ehco hello zzyy;sleep 2;done"
- docker logs -f -t --tail <容器ID>          查看容器日志
        		-t              			日志加入时间戳
            	-f              			跟随最新的日志打印
            	--tail <数字>       			显示最后多少条

- docker top <容器ID>         				查看容器里的进程

- docker inspect <容器ID>     				查看容器内部细节

- docker exec -it 容器ID bashShell			进入容器执行shell操作,直接返回结果
                   +  /bin/bash   			进入容器终端 
- docker attach 容器ID						进入容器终端

- docker cp 容器ID:/tep/yum.log  /root       拷贝容器内路径 到 宿主机路径

小总结

其他

- Docker的三大特征
    容器
    镜像
    仓库

- Docker包含两方面技术
    - 镜像技术
        打破“代码即应用”的观念 ==》映像档即应用
        从系统环境开始,自底至上打包应用(内核、操作系统发行版、运行依赖包、运行环境、配置环境、运行文档)

Docker镜像

是什么

- 是一种轻量级、可执行的独立软件包,用来打包 运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时库、环境变量和配置文件。
1. UnionFS(联合文件系统)
	是一种分层的、轻量级的、高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。nuion文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。
	特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会吧各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录.

2. Docker镜像加载原理
	- docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。
	- bootfs主要包含bootLoader和kernel,bootLoader主要是应道加载kerner,linux刚启动时会加载bootfs文件系统,在docker镜像的最底层是bootfs。
	- rootfs,在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等

	- docker中的cenos镜像为什么这么小,因为不同版本的linux系统的bootfs是公用的,只有rootfs是不同的。

3. 分层的镜像
	- 一层包一层,kerner<centOs<jdk<tomcat
	- 
4. 为什么Docker镜像要采用这种分层结构呢

特点

- Docker镜像都是只读的
- 当容器启动时,一个新的可写层被加载到镜像的顶部
- 这一层通常被称为“容器层”,“容器层”之下的都叫做“镜像层”

Docker容器数据卷

是什么

- 对容器里面的数据进行持久化
- 容器之间希望有可能共享数据

能干嘛

- 容器的持久化
- 容器间继承 + 数据共享
- 宿主机与容器之间的数据共享	

- 特点
	* 数据卷可容器之间共享或重用数据
	* 卷中国的更改可以直接生效
	* 数据卷中的更改不会包含在镜像的更新中
	* 数据卷的生命周期一直持续到没有容器使用它为止

数据卷

- 容器内添加
	- 直接命令添加
		- 命令			
			- docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名			加容器数据卷
		- 两个目录(容器和宿主机)之间建立连接,达到数据共享
		- 查看数据卷是否挂载成功  		
			- docker info		Volumes、VolumesRW
		- 容器停止退出后,主机修改后数据是否同步
			- 是同步的
		- 命令(权限)
			- docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名		加容器数据卷(容器中只读)		
	- DockerFile添加
		- 是什么
			- 镜像的描述文件
		- 步骤:
			1. 根目录下新建mydocker文件并进入,添加并编辑Dockerfile文件
			2. 可在Dokcerfile中使用VOLUME指令来给镜像添加一个或多个数据卷
			3. File构建  
					# volume test
					FROM centos
					VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2","/dataVolumeContainer3"]
					CMD echo "finished ,---------success1"
					CMD /bin/bash
			4. build后生成镜像
				docker build -f /mydocker/Dockerfile -t myip_father .
			5. run容器,docker容器信息查看分析
				1. 宿主机自动指定容器卷地址
				2. 容器中指定地址生成容器卷
				3. 两个容器卷地址可以实现数据共享
		- 
	- 备注
		- 如果Docker挂载主机目录Docker访问出现cannot open directory.:permission denied 异常,权限异常
			- 解决办法,在挂载目录(run -v 路径)后多加一个 --privileged=true 参数即可

数据卷容器

- 是什么
	- 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据容器卷
	- 链式数据传递共享
- 
- 容器间传递共享(--volumes-from)
	1. 启动一个父容器
		- docker run -it --name dc01 zzyy/centos	启动一个容器并进入,进入数据卷添加数据
	2. dc02/dc03继承自dc01  --volumes-from	达到多容器的数据共享
		- docker run -it --name dc02 --volumes-from dc01 zzyy/centos
		- docker run -it --name dc03 --volumes-from dc01 zzy y/centos
	3. 删除dc01,dc02与dc02里的数据卷依旧保留,并且相互之间共享数据
	4. 启动dc04容器,继承dc03。可以继承dc03中所有数据卷
	5. 删除dc03,dc04与dc02里的数据卷依旧保留,并且相互之间共享数据

Dockerfile解析

是什么

1. Dockerfile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本
2. 构建3步骤
	- 手动编写一个dockerfile文件,必须要符合file的规范
	- 直接docker build命令执行,获得一个自定义的镜像

DockerFile构建过程解析

- DockerFile内容基础知识
	1. 每条保留字指令必须为大写且后面要跟至少一个参数
	2. 指令按照从上到下顺序执行
	3. #表示注释
	4. 每条指令都会创建一个新的镜像层,并对镜像进行提交 **
- Docker执行Dockerfile的大致流程
	1. docker从基础镜像运行一个容器
	2. 执行一条指令并对容器做出修改
	3. 执行类似docker commit的操作提交一个新的镜像
	4. docker在基于刚提交的镜像运行一个新容器
	5. 执行dockerfile中的下一条指令直到所有指令都执行完成
- 小总结
	- 从应用软件的角度来看,Dockerfile、Docker镜像、Docker容器分别代表软件的三个不同阶段
		- DockerFile是软件的原材料
		- Docker镜像是软件的交付品
		- Docker容器是则可以任务是软件的运行态
	- Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合理充当Docker体系的基石

DockerFile体系结构(保留字指令)

- FROM						当前新镜像是基于哪个镜像的
			- scratch		Docker基础镜像
- MAINTAINER				镜像维护者的姓名和邮箱地址
- RUN						容器构建过程中需要运行的linux命令
- EXPOSE					当前容器对外暴露出的端口
- WORKDIR					指定在创建容器后,进入终端时,默认进入的工作路径
- ENV						在构建镜像过程中,设置环境变量
- ADD						将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压tar压缩包	
- COPY						类似于ADD,拷贝文件和目录到镜像中
			- COPY src dest
			- COPY  ["src","dest"]
- VOLUME					添加容器数据卷,用于数据保存和持久化工作
- CMD						指定一个容器启动时要运行的命令
							Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
- ENTRYPOINT				指定一个容器启动时要运行的命令
							ENTRYPOINT的作用类似CMD,但会追加指令,不是替换
- ONBUILD					触发器,此Dockerfile构建的镜像,在被子镜像继承(FROM)时,hui 触发onbuild指令后的操作指令

小总结

* 使用Dockerfile创建Centos(tomcat+jdk)镜像
    #指定操作的镜像
    FROM centos
    # 维护者信息
    MAINTAINER biubiu
    #执行命令:创建目录
    RUN mkdir -p /usr/local/soft
    #将jdk1.8.0_171添加到镜像centos的/usr/local/soft/目录下,并命名为jdk
    ADD jdk1.8.0_171 /usr/local/soft/jdk
    #将apache-tomcat-8.5.31添加到镜像centos的/usr/local/soft/目录下,并命名为tomcat
    ADD apache-tomcat-8.5.31 /usr/local/soft/tomcat
    #添加环境变量
    ENV JAVA_HOME /usr/local/soft/jdk
    ENV CATALINA_HOME /usr/local/soft/tomcat
    ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
    #暴露8080端口
    EXPOSE 8080
    #启动时运行tomcat
    CMD ["/usr/local/soft/tomcat/bin/catalina.sh","run"]

Docker常用安装

总体步骤

- 搜
- 拉
- 看
- 启
- 停
- 删

安装tomcat

-

安装mysql

- docker pull mysql:5.6
- docker run -p 3306:3306 --name mysql                              #端口映射
            -v /devlop/mysql/conf:/etc/mysql/conf.d                #配置
            -v /devlop/mysql/logs:/logs                            #日志
            -v /devlop/mysql/data:/var/lib/mysqls                  #数据
            -e MYSQL_ROOT_PASSWORD=123456                           #配置环境
            -v /etc/localtime:/etc/localtime                 # 共享主机时间
            -d mysql:5.6                                            #配置环境

docker run -p 3306:3306 --name mysql -v /devlop/mysql/conf:/etc/mysql/conf.d  -v /devlop/mysql/logs:/logs   -v /devlop/mysql/data:/var/lib/mysqls  -e MYSQL_ROOT_PASSWORD=123456 -d mysql

docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/etc/mysql/conf.d  -v /home/mysql/logs:/logs   -v /home/mysql/data:/var/lib/mysqls  -v /etc/localtime:/etc/localtime  -e MYSQL_ROOT_PASSWORD=foco123123. -d mysql

- 数据库备份至宿主机路径中:
    docker exec 容器ID sh -c ' exec mysqldump --all-databases-uroot -p"123456" '> /zyyuse/all-databases.sql
docker pull mysql:5.7

docker run -p 3306:3306 --name mysql5.7 \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7                                     #配置环境

-p 3306:3306 --name mysql \             # 将容器的3306端口映射到主机的3306端口,'\'指换行符,下同
-v /mydata/mysql/log:/var/log/mysql \   # 将配置文件夹挂载到主机,冒号左边为Linux的目录结构,右边为docker内部的
-v /mydata/mysql/data:/var/lib/mysql \  # 将日志文件夹挂戟到主机
-v /mydata/mysql/conf:/etc/mysql \      # 将配置文件夹挂载到主机
-e MYSQL_ROOT_PASSWORD=123456 \         # 初始化root用户的密码为:123456
-d mysql:5.7


docker run -d -p 3306:3306 --privileged=true -v /docker/mysql/conf/my.cnf:/etc/my.cnf -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name lcoal_mysql_5.7 mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

- mac安装指令
docker run -p 3306:3306 -v /Users/xxxxx/devlop/mysql/logs:/logs -v /Users/xxxxx/devlop/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /Users/xxxxx/devlop/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 --name lcoal_mysql_5.7 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

*** 2022-06-08使用,本地新建/Users/xxxxx/devlop/mysql/conf/my.cnf配置后使用挂载
docker run -p 3306:3306  --privileged=true -d  -v /Users/xxxxx/devlop/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -v /Users/xxxxx/devlop/mysql/logs:/logs -v /Users/xxxxx/devlop/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 --name lcoal_mysql_5.7  mysql:5.7 



- WARNING: IPv4 forwarding is disabled. Networking will not work.
    解决方法如下:
    vim /etc/sysctl.conf
    
    #配置转发
    net.ipv4.ip_forward=1

    #重启服务,让配置生效
    systemctl restart network
    
    #查看是否成功,如果返回为“net.ipv4.ip_forward = 1”则表示成功
    sysctl net.ipv4.ip_forward




- MySQL跟随docker启动而启动
docker update mysql --restart=always


- 数据库备份至宿主机路径中:
    docker exec 容器ID sh -c ' exec mysqldump --all-databases-uroot -p"123456" '> /zyyuse/all-databases.sql


- 挂载参考:
- https://blog.csdn.net/ytsydmx/article/details/119741639
- https://blog.51cto.com/suyanzhu/2447815



*** 2022-08-02使用,windows系统 本地挂在启动


docker run -p 13306:3306  -v C:\z-dev\docker\mysql\logs:/logs -v C:\z-dev\docker\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=dev.2022 --name lcoal_mysql_5.7 -d   mysql:5.7 




*** 2023-04使用Mac新mysql容器
docker run -p 3306:3306  --privileged=true -d  -v /Users/xxxxx/devlop/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf  -v /Users/xxxxx/devlop/mysql/logs:/logs -v /Users/xxxxx/devlop/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 --name lcoal_mysql_5.7_new  mysql:5.7

安装redis

- docker pull redis
- docker run -p 6379:6379
            -v /zzyyuse/myredis/data:/data
            -v /zzyyuse/myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf
            -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf
            --appendonly yes
            
- 修改配置文件
    - 在主机/zzyyuse/myredis/conf/redis.conf目录下新建redis.conf文件
    /zzyyuse/myredis/conf/redis.conf/redis.conf         编辑redis配置
                
    -p 6379:6379 : 将容器的6379端口映射到主机的6379端口

    -v $PWD/data:/data : 将主机中当前目录下的data挂载到容器的/data
        
    redis-server --appendonly yes : 在容器执行redis-server启动命令,并打开redis持久化配置
# 创建并运行一个名为 myredis 的容器
docker run \
-p 6379:6379 \
-v $PWD/data:/data \
-v $PWD/conf/redis.conf:/etc/redis/redis.conf \
--privileged=true \
--name myredis \
-d redis redis-server /etc/redis/redis.conf

docker run \
-p 6379:6379 \
-v /Users/fenggs/devlop/redis/data:/data \
-v /Users/fenggs/devlop/redis/conf/redis.conf:/etc/redis/redis.conf \
--privileged=true \
--name myredis \
-d redis redis-server /etc/redis/redis.conf


# 命令分解
docker run \
-p 6379:6379 \ # 端口映射 宿主机:容器
-v $PWD/data:/data:rw \ # 映射数据目录 rw 为读写
-v $PWD/conf/redis.conf:/etc/redis/redis.conf:ro \ # 挂载配置文件 ro 为readonly
--privileged=true \ # 给与一些权限
--name myredis \ # 给容器起个名字
-d redis redis-server /etc/redis/redis.conf # deamon 运行 服务使用指定的配置文件
- 查看活跃的容器
    # 查看活跃的容器
    docker ps
    # 如果没有 myredis 说明启动失败 查看错误日志
    docker logs myredis
    # 查看 myredis 的 ip 挂载 端口映射等信息
    docker inspect myredis
    # 查看 myredis 的端口映射
    docker port myredis

- IP 查看
    docker inspect e60da5191243|grep -i add
    
- docker exec -it 容器ID redis-cli  进入redis客户端
- SHUTDOWN         退出客户端



---- redis配置外网访问:

更改redis.conf 文件
bind 127.0.0.1
protected-mode yes
更改为:
# bind 127.0.0.1
protected-mode no

redis通过配置文件设置密码
# requirepass foobared
requirepass yourpassword

安装nginx

//linux方式
docker run --name mynginx -d -p 80:80 
-v /usr/data/nginx/www:/usr/share/nginx/html
-v /usr/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /usr/data/nginx/logs:/var/log/nginx
-d docker.io/nginx

//mac上,存在nginx.conf文件、夹文件问题,
docker run --name mynginx -d -p 88:80 -v /Users/fenggs/devlop/nginx/www:/usr/share/nginx/html -v /Users/fenggs/devlop/nginx/config:/etc/nginx/nginx.conf -v /Users/fenggs/devlop/nginx/logs:/var/log/nginx
 docker.io/nginx

安装Rabbimt MQ

# -management 表示有管理界面的
docker pull rabbitmq:management
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management
# 用户名/密码: guest/guest

安装MongoDB

1. docker pull mongo

2. 使用自定义配置文件启动mongo
    docker run --name some-mongo -v /my/custom:/etc/mongo -p 27017:27017  -d mongo --config /etc/mongo/mongod.conf
    
3. 使用环境变量配置初始化账号密码
    docker run -d --name some-mongo -p 27017:27017  -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo
    
4. 数据持久化
    docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo
    
5. 数据导出
    docker exec some-mongo sh -c 'exec mongodump -d <database_name> --archive' > /some/path/on/your/host/all-collections.archive
    
    
    
结合:

    docker run --name mymongo -v /my/custom:/etc/mongo   -v /my/own/datadir:/data/db  -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=123456   -d mongo --config /etc/mongo/mongod.conf
    
    
   docker run --name mymongo -v /Users/fenggs/devlop/mongodb/etc/mongo:/etc/mongo   -v /Users/fenggs/devlop/mongodb/data/db:/data/db -p 27017:27017  -d mongo

本地镜像发布到阿里云

流程

- 将本地images镜像push到阿里云Dockers Registry或者私有Docker Registry

镜像生成的方法

- dockers commit -a 作者名 -m "注释信息" 容器ID+版本号 新镜像名

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
eg:docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1

将本地镜像推送到阿里云

- 登录阿里云账号,进入镜像列表
- 新建仓库,设置命名空间和仓库名称等信息
- 将镜像推送到阿里云里新建的仓库
    1. 连接阿里云远程仓库
        $ sodo my docker login --username=registry.cn-hangzhou.aiyuncs.com
    2. 输入账户密码
    3. 选择镜像
        docker tag 镜像ID registy.cn-hangzhou.aliyuncs.com/zzyybuy/mycentos:1.5.1
    4. 推送镜像
        docker push registry.cn-hangzhou.aliyuncs.com/zzyybuy/mycentos:1.5.1
    5. 阿里云dockethub里可以搜到上传的镜像

将阿里云上的镜像下载到本地

- 通过dockers pull拉取远程仓库的docker镜像

其他

  • 建立网络桥接,自定义ip,并使容器之间网络相同
  • 建立网络桥段
    docker network create --subnet=172.20.0.0/24 docker-br0
  • 建立一个容器,分配ip地址
    docker run -itd --net docker-br0 --ip 172.20.0.10 --name net-centos1 9f38484d220f /bin/bash
  • 建第二个容器,分配同网段ip地址
    docker run -itd --net docker-br0 --ip 172.20.0.9 --name net-centos2 9f38484d220f /bin/bash
  • 两个容器ip互通
  • 创建包含启动项、并指定ip、有网络桥接的容器
  • docker run -itd --net docker-br0 --ip 172.20.0.10 --name br0-centos01 ab3a676698a5 /run.sh
  • docker run -itd --net docker-br0 --ip 172.20.0.9 --name br0-centos02 ab3a676698a5 /run.sh
  • 进入容器的方式:
  • docker exec -it br0-centos01 /bin/bash
  • docker run -itd --net docker-br0 --ip 172.20.0.1 --name centos-fgs2 -p 10032:22 ab3a676698a5 /run.sh
  • docker commit -m '注释' -a '作者' 46d6949f23b3 containerName:tag
  • hadoop 启动方式
  • docker run -itd --net docker-br0 --ip 172.20.0.12 --name centos-fgs1 -p 10032:22 -p 50070:50070 -p 8020:8020 --privileged=true hadoop-centos:003 /run.sh

run.sh文件
#!/bin/bash /usr/sbin/sshd -D;

export JAVA_HOME=/root/app/jdk1.8.0_201 export HADOOP_HOME=/root/app/hadoop-2.6.0-cdh5.15.2 export PATH=Docker --镜像容器学习笔记_数据JAVA_HOME/bin:$PATH

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  gBkHYLY8jvYd   2023年12月09日   12   0   0 cii++数据