Docker - Dockerfile的使用
Dockerfile: 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
应用: 将部署过程中涉及到的所有步骤全部写入到 Dockerfile 中,到时只需要执行 Dockerfile 就可以自动完成相应的操作
快速入门编辑Dockerfile在当前目录下创建 Dockerfile 并进行编辑1vim Dockerfile操作:启动 ubuntu 镜像,在启动起来后去更新 ubuntu 容器下的软件资源内容如下1234# From: 启动运行一个镜像资源From ubuntu# Run: 在启动起来的容器中执行指令RUN apt-get update
运行Dockerfile构建镜像命令1docker build -t [镜像名]:[版本号] [Dockerfile所在目录]指定在当前目录下去查找 Dockerfile 文件,并将 Dockerfile 自动化处理后的(更新了软件资源)容器打成名为 lxf 的镜像资源
1docker build -t lxf .
执行效果:待执行完成后,当前拥有的镜像资源就多出了 lxf 这一个,可以看到 lxf 这个镜 ...
Docker - 网络管理
默认情况下,容器和宿主机之间网络是隔离的
现在启动了一个 nginx 容器如图所示 nginx 使用了 80 端口,但是我们去浏览器里访问 localhost:80 是无法访问到 nginx 服务的这个时候可以通过端口映射的方式,将容器中的端口,映射到宿主机的某个端口上,从而使我们能够通过宿主机的 ip+端口 的方式来访问容器里的内容
随机端口映射
-P :自动绑定所有对外提供服务的容器端口,映射的端口会从没有使用的端口池中自动随机选择,如果连续启动多个容器的话,则下一个容器的端口默认是当前容器的端口号+1
命令1docker run -d -P [镜像名称]在刚才的命令基本上加 -P1docker run -dit -P --name lxfnginx nginx这样宿主机的 55000 端口就映射到了窗口的 80 端口,访问也是成功的。
指定端口映射命令1docker run -d -p [宿主机ip]:[宿主机端口]:[容器端口] --name [容器名称] [镜像名称]将宿主机上的 8000 端口映射到 nginx 容器的 80 端口1docker run -dit ...
Docker - 数据管理
拷贝数据宿主机文件 -> 容器内1docker cp 需要拷贝的文件或目录 容器名:容器内的目录路径
如:把宿主机当前目录下的 lxf.sh 文件,拷贝到 lxfubuntu1 容器下的 /data 目录中1docker cp lxf.sh lxfubuntu1:/data
容器内 -> 宿主机文件1docker cp 容器名:容器内需要拷贝的文件或目录 宿主机目录
如:把 lxfubuntu1 容器中 /data 目录下的 lxf.sh 文件,拷贝到宿主机 ~/lxf/ 目录下1docker cp lxfubuntu1:/data/lxf.sh ~/lxf/
数据卷管理
数据卷管理就是将容器的某个目录,映射到宿主机,作为数据存储同步的目录
命令:1docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]下面进行操作示范:
在宿主机创建一个名为 data 的目录,这个名字可任意1mkdir data将宿主机的 data 目录映射到容器中的 /home 目录1docker run -it -v ~/l ...
Docker - 私有仓库Registry
私有仓库: 在本地(局域网)搭建的一个类似公共仓库的东西,我们可以将镜像提交到私有仓库中,供局域网内的其它人拉取使用。本文以 Registry 为例,并在提供私有仓库的主机上操作
拉取私有仓库镜像请先确保你当前拥有的镜像有 registry如果没有,可以先拉取下来
1docker image pull registry
设置私有仓库地址1vim /etc/docker/daemon.json
修改 insecure-registries 的值,提供私有仓库的主机的ip地址和端口1234567{ ... "insecure-registries":[ "192.168.1.234:5000" ], ...}Mac软件版修改后重新启动 docker 服务
运行私有仓库镜像资源将 registry 镜像生成一个容器并运行起来123# -p 5000:5000 # 第一个是容器使用的端口,第二个是本地端口,这里是本地端口映射到把容器的端口docker run -d -p 5000:5000 registry1234~/lxf ❯ docker ps❯ d ...
Docker - 操作容器
运行容器这里我使用 ubuntu 镜像,创建一个名为 lxfubuntu 的容器,并运行进入容器123# docker run -it --name [容器名] [镜像名] /bin/bashdocker run -it --name lxfubuntu ubuntu /bin/bash命令参数详解:
--name : 定义容器名称,如果不使用,则会随机产生一个名字
-i : 让容器的标准输入保持打开
-t : 让 docker 分配一个伪终端,并绑定到窗口的标准输入上
-d : 以守护进程的方式运行容器,不占用终端
/bin/bash : 执行一个命令
如图,执行后即可进入容器中
如果想创建并以守护进程的方式运行容器,可以使用 -d1docker run -dit --name lxfubuntu1 ubuntu /bin/bash
123# docker start [container_id]docker start c97abc3f151a
进入容器如果我们想进入上述提及的以守护进程方式运行的容器中,可以使用 docker exec1docker exec -it lx ...
Docker - 操作镜像资源
搜索镜像资源1docker search nginx
一般选择 STARS 数最大的
拉取镜像比如拉取上提及的 nginx 镜像1docker image pull nginx命令执行后就开始对镜像进行拉取了
查看当前拥有的镜像
镜像ID: 镜像的唯一标识,如果镜像ID相同,则说明是同一个镜像
TAG: 用来区分不同的发行版本,如果不指定具体标记,则默认使用latest来标记信息
123docker image ls# 或docker images
查看镜像的详情信息12# docker image inspect 镜像名docker image inspect ubuntu
删除镜像完整写法1docker image rm ubuntu简洁写法1docker rmi ubuntu除了可以根据镜像名来删除外,也可以使用镜像ID,如使用上述的 ubuntu 镜像ID1docker rmi f643c72bc252如果我们对同一个镜像打了多个 tag ,导致同一个镜像ID存在多个镜像名称,那此时可以使用 name:tag 的格式来删除镜像,如:123docker rmi ubun ...
Docker - 安装、加速和基本使用
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上
本文主要以 Mac 平台为例
安装方式一: Homebrew1brew cask install docker
方式二: 桌面程序
我使用该方式
访问 https://www.docker.com/get-started,在 Docker Desktop 下选择你当前系统对应的软件进行下载安装
镜像加速镜像Daocloud
实测,速度不咋地
打开 daocloud.io 网站,注册并登录,点击加速器按钮,或者直接打开 https://www.daocloud.io/mirror,打开的页面上会显示与你账号相关的加速地址
其它
实测,速度杠杠的,推荐使用
镜像
地址
Docker中国区官方镜像
https://registry.docker-cn.com
网易
http://hub-mirror.c.163.com
ustc
https://docker.mirrors.ustc.edu.cn ...
Flutter - 低版本在iOS14上遇到的问题与解决方案
近期将测试机升级至 iOS14 ,测试使用 Flutter混合开发 的线上 APP,没发现什么问题,但是使用 Xcode 安装APP 的场景下,断开 Xcode 后再运行却闪退了。
+
一、概述近期将测试机升级至 iOS14 ,测试使用 Flutter混合开发 的线上 APP,没发现什么问题,但是使用 Xcode 安装APP的场景下,断开 Xcode 后再运行却闪退了。
公司的 APP 测试结果如下:
APP来源
是否闪退
模式
线上
否
release
蒲公英
是
debug
Xcode
是(断开 Xcode 后再打开 APP )
debug
问题原因闪退的原因是因为 Flutter SDK, Flutter 官方的更新速度也是快,对 iOS14 进行了说明: Flutter官网说明链接
大致意思就是说,如果我们在 iOS14 的真机上安装了 debug模式 编译出来的 flutter 应用,那么在断开编译安装连接后,将无法从桌面上打开该应用程序。
解决方案
再次是使用 Xcode 或 flutter run 来运行。
设置 Flutter ...
分享 - Flutter打造好用的打印工具类
如果我们可以在调用函数时拿到当前调用堆栈,就可以取到一系列想要的数据。
+
一、思考做 iOS 开发的同学都知道,我们在平时开发过程中,经常会用到非常实用的自定义打印功能,方便我们快速定位是在哪个控制器,哪一行代码。
在 OC 和 Swift 中都可以很轻松实现,因为系统本来就提供了用于日志输出的预处理宏,只要我们拿来拼接就可以了,这里以 Swift 的打印为例:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374enum LogType: String { case error = "❤️ ERROR" case warning = "💛 WARNING" case info = "💙 INFO" case debug = "💚 DEBUG"}let log = Logger.sharedfinal ...
解决 Could not find 'faraday' ... gem(s) (Gem::LoadError)
`to_specs’: Could not find ‘faraday’ (>= 0.7.4) among 77 total gem(s) (Gem::LoadError)
+
一、遇到的问题报错内容如下:1234567891011121314151617/Users/lxf/.fastlane/bin/bundle/lib/ruby/site_ruby/2.2.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'faraday' (>= 0.7.4) among 77 total gem(s) (Gem::LoadError)Checked in 'GEM_PATH=/Users/lxf/.fastlane/bin/bundle/bin:/Users/lxf/.fastlane/bin/bundle/lib/ruby/gems/2.2.0', execute `gem env` for more information from /Users/lxf/.fastlane/bin/bundle/l ...