搜尋
首頁後端開發php教程Docker for Windows安裝與Linux+PHP開發環境建置(一)

Docker是什麼?

簡單得來說,Docker是一個由GO語言寫的程式運行的「容器」(Linux containers, LXCs); 目前雲端服務的基石是作業系統層級的隔離,在同一台物理伺服器上虛擬出多台主機。 Docker則實現了一種應用程式層級的隔離; 它改變我們基本的開發、操作單元,由直接操作虛擬主機(VM),轉換到操作程序運行的「容器」上來。

Docker的好處

Docker的優點:運作快、部署敏捷、靈活、輕量、開源免費。

Boot2Docker是一個專為Docker而設計的輕量Linux發行包,解決Windows或OS X用戶無法安裝Docker的問題。 Boot2Docker完全運行於記憶體中,24M大小,啟動僅5-6秒。 Boot2Docker需要運行在 VirtualBox。

Docker for Windows的安裝使用步驟

檢查系統版本與硬體虛擬化

首先,檢查Windows作業系統版本號

Boot2Docker的運行,要求作業系統至少為Windows 7.1,8/8.1。實測Windows 7 旗艦版(Windows 7 Ultimate)也支援。

其次,需要確保你的系統支援硬體虛擬化,且虛擬化為已啟用狀態。

開啟虛擬化技術支持,需幾個方面的條件支援:晶片組本身支援、BIOS提供支援、處理器自身支援、作業系統支援。

作業系統方面,主流作業系統均支援VMM管理,因此無需考慮。而晶片組方面,從Intel 945(除上網本外)時代開始均已經支持,因此也無需考慮。 CPU方面,可以透過Intel官方網站進行查詢或第三方偵測軟體來判斷。因此,更多的是查看BIOS方面是否支援。

對於Windows 8/8.1系統,開啟工作管理員-「效能」標籤-CPU,可以看到虛擬化的開啟狀態。如下圖:

Docker for Windows安裝與Linux+PHP開發環境建置(一)

如果為「未啟用」狀態,則需要到主機板BIOS進行開啟。

進入BIOS的方法:在電腦開機啟動中,當畫面下方出現「Press DEL to enter SETUP」提示時,立即按「Del」鍵就能進入BIOS設定程式。有些類型的BIOS,則需要在開啟啟動Logo畫面按F2或F10鍵進入,具體根據螢幕提示操作就可以。

舉例,找到Intel Virtual Technology設定項,將Disabled改為Enabled。然後儲存退出,即可開啟VT功能。如下圖:

Enable Intel Virtual Technology

對於Windows 7系統,需要安裝微軟的硬體虛擬化偵測工具(Microsoft? Hardware-Assisted Virtualization Detection Tool)來判斷處理器是否支援虛擬化,以及虛擬化是否已開啟。下載安裝HAV detection tool,偵測結果遵照螢幕提示,然後參考HAV Detection Tool User Guide 進行下一步操作。

下載網址:

HAV Detection Tool
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/havdetectiontool.exe

HAV Detection Tool User Guide
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/HAV%20Detection%20Tool%20-%20User%20Guide.mht

則表示目前電腦處理器支援硬體虛擬化並且已啟用。

Hardware-Assisted Virtualization Detection

安裝Boot2Docker

接下來需要安裝Boot2Docker與一些輔助性軟體。具體包括:

Docker Client for Windows

Boot2Docker management tool and ISO
Oracle VM VirtualBox
Git MSYS-git UNIX tools

先點選下載Boot2Docker for Windows。

下載網址:

https://s3.amazonaws.com/github-cloud/releases/18047765/825908bc-15b8-11e5-96cb-9a42a043ccname39.D43cfilec -install.exe&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1437386585&Signature=wM%2BTTYN4yqc8fhh7WAEeZw7A5ccckerdcd7安裝過程最好提前關閉電腦的相關安全軟體。

官方下載速度比較慢,可以嘗試到國內的DaoCloud下載http://get.daocloud.io/

驗證是否安裝成功

安裝完成後啟動Boot2Docker。

開啟Boot2Docker終端機後,如果系統出現使用者帳戶控制(User Account Control)提示,請選擇“是(Yes)”,以確保虛擬機VirtualBox 完成一些電腦配置的變更。若無提示,一般無需設定。 Desktop Iconset

註:使用者帳戶控制(UAC)是Windows Vista的一個新增的安全功能。它可以防止惡意軟體取得特權,就算使用者是以管理員帳號登入也可以起到保護作用。可在控制台修改UAC,以Win7旗艦版為例是:控制台(Control Panel ) → 所有控制台項目(All Control Panel Items) → 使用者帳戶(User Account) → 變更使用者帳戶控制設定(Change User Account Control setting)。

UAC Setting

終端需要一定初始化時間來啟動Boot2Docker,執行Docker運行所需的環境變數bash腳本,如果成功啟動,會出現一$提示符。

Boot2docker Start

使用boot2docker ssh指令可以進入VM。稍後需要用到該指令進行一些基礎設定。

boot2docker ssh

現在可以直接使用docker指令了。

在終端執行指令docker run hello-world,回車。若運作正常,會輸出如下內容:

<code>$ docker run hello-world
Unable <span>to</span> find image <span>'hello-world:latest'</span> locally
Pulling repository hello-world
<span>91</span>c95931e552: Download complete 
a8219747be10: Download complete 
Status: Downloaded newer image <span>for</span> hello-world:latest
Hello <span>from</span> Docker.
This message shows that your installation appears <span>to</span> be working correctly.


To generate this message, Docker took <span>the</span> following steps:
 <span>1.</span> The Docker client contacted <span>the</span> Docker daemon.
 <span>2.</span> The Docker daemon pulled <span>the</span><span>"hello-world"</span> image <span>from</span><span>the</span> Docker Hub.
    (Assuming <span>it</span> was <span>not</span> already locally available.)
 <span>3.</span> The Docker daemon created <span>a</span><span>new</span> container <span>from</span> that image which runs <span>the</span>
    executable that produces <span>the</span> output you are currently reading.
 <span>4.</span> The Docker daemon streamed that output <span>to</span><span>the</span> Docker client, which sent <span>it</span><span>to</span> your terminal.


To <span>try</span> something more ambitious, you can run <span>an</span> Ubuntu container <span>with</span>:
 $ docker run -<span>it</span> ubuntu bash


For more examples <span>and</span> ideas, visit:
 <span>http</span>://docs.docker.com/userguide/

</code>

了解容器與鏡像

以指令docker run hello-world 為例:

docker run container

容器就是一個簡化版的Linux作業系統,就是裝載到容器中的鏡像軟體集合,此指令執行後,Docker會依照順序發生以下行為:

a. 檢查是否已安裝hello-world映像
b. 若未安裝,請從Docker遠端倉庫(Docker Hub)下載該映像
c. 載入該鏡像到容器中,並運作。

創建Doker PHP容器,啟用PHP開發環境

Docker Hub中有個人開發者提供的鏡像,也有公司、組織結構上傳的官方鏡像,你可以使用Docker Hub的鏡像,也可以使用自己本地私有的鏡像(如local.registry.com:5000/php)。以PHP開發環境的搭建為例,繼續說明Docker指令的使用方法。

這裡使用的是自建私有映像(已經整合Linux+PHP+Apache),私有映像位址為:172.16.100.71:5000/php

1、設定Windows系統、boot2docker VM的host

工具的host

.系統本機host

設定Windows系統本機host主要是為方便在CMD命令提示字元中進行操作。若是在Git Bash中操作則可以選擇略過Windows系統本機host設定。

位置:C:WindowsSystem32driversetchosts

在檔案中增加一行172.16.100.71 local.registry.com

b. 設定boot2dockerk 命令

/etc/hosts

在文件中增加一行: 172.16.100.71 local.registry.com

exit


也可使用組合指令:

<code>boot2docker ssh <span>"echo $'172.16.100.71 local.registry.com' | sudo tee -a /etc/hosts"</span></code>
2、檢查設定環境變數

在Git Bash中輸入:

<code><span>export</span></code>
查看是否已自動設定環境變數:DOCKER_HOST,DOCYCERT_PATH,DOCYcker端的環境變量,所以可使用以下指令自動設定環境變數

<code><span>eval</span><span>"<span>$(boot2docker shellinit)</span>"</span></code>
若此指令不能成功設置,需要輸入以下指令手動新增:

<code><span>export</span> DOCKER_HOST=tcp:<span>//192.168.59.103:2376</span><span>export</span> DOCKER_CERT_PATH=/c/Users/Administrator/.boot2docker/certs/boot2docker-vm
<span>export</span> DOCKER_TLS_VERIFY=<span>1</span></code>
執行後輸入export 查看是否寫入成功。

若要使得Windows本身的CMD中也可以操作Docker指令,在cmd中鍵入以下指令:

<code><span>set</span> DOCKER_HOST<span>=</span>tcp:<span>//192.168.59.103:2376</span><span>set</span> DOCKER_CERT_PATH<span>=</span>C:/Users/Administrator<span>/</span><span>.</span>boot2docker/certs/boot2docker<span>-vm</span><span>set</span> DOCKER_TLS_VERIFY<span>=</span><span>1</span></code>
執行後輸入set 看是否寫入成功。

不過透過set指令設定的環境變數是暫時有效的,當關閉cmd命令列視窗後就不再運作。

永久性環境變數的設定方法是:“電腦-屬性-進階系統設定-進階-環境變數”,新建上述三個系統變數並填入對應值。設定完成後重新開啟CMD即可生效。

另外,如果想在CMD要執行boot2docker ssh等指令,還需要設定Git相關的環境變數。方法為:

<code>set PATH=<span>%PATH</span><span>%;</span><span>"C:\Program Files (x86)\Git\bin"</span></code>
永久環境變數設定方法同上,在系統變數PATH欄位追加以下目錄(具體目錄依自己Git安裝目錄新增)

;C:Program Files (x86)Gitbin;

然後重新啟動cmd即生效。

3、設定–insecure-registry選項

從docker 1.3.1開始,連接不安全的私有鏡像,預設是不允許的。現在我們要下載自建的私有鏡像,需要透過以下方式設定:

<code>boot2docker ssh
<span>sudo</span> vi /var/lib/boot2docker/profile</code>
增加一行

<code><span>EXTRA_ARGS=<span><span>"--insecure-registry local.registry.com:5000"</span></span></span></code>
保存,然後重啟docker服務:

<code><span>sudo</span> /etc/init.d/docker restart</code>
也可以在Git Bash合併操作:
<code>boot2docker ssh <span>"echo $'EXTRA_ARGS=\"</span>--insecure-registry local.registry.com:<span>5000</span>\<span>"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"</span></code>

: .com:5000這樣的私有鏡像位址也可用IP位址取代。

tee指令參數 -a為追加內容到文件,視情況使用。

sudo /etc/init.d/docker restart指令有時會重新啟動失敗,所以我們可以透過以下指令觀察docker流程的資訊:

<code>ps -ef <span>|grep docker</span></code>

若docker主进程(/usr/local/bin/docker)PID比较小,且运行时间比较久,那么说明没有重启成功。需要强制杀死该进程后再重启。

<code><span>sudo</span> kill -<span>9</span> pid
<span>sudo</span> /etc/init.d/docker restart</code>

最后通过ps -ef |grep docker命令再检查一遍进程号和运行时间,保证docker重启成功。

<code>ps -ef |<span>grep</span> docker
<span>exit</span></code>

4、将私有镜像下载到本地

<code>docker pull local<span>.registry</span><span>.com</span>:<span>5000</span>/php</code>

在镜像运行前,先将其下载到本地,如果报错,参照之前步骤或错误处理进行解决,解决后继续执行后续步骤

5、检查、设置虚拟机共享文件夹

VirtualBox默认将宿主机目录C:\Users作为共享文件夹,并自动挂载到虚拟机c/Users路径。所以一般情况下我们通常选择将数据放在宿主机C:\Users目录,然后通过docker命令挂载到容器。但作为Windows用户,大家的C盘常作为系统盘,关键数据放在C盘是比较危险的,一旦Windows系统损坏无法启动有可能造成数据丢失。

所以,我们想到:能不能自己添加其他盘符下的共享文件夹,挂载到容器?

当然可以!!!步骤有些繁琐,继续往下看。

经过尝试,在C:\Users目录创建指向其他盘符共享文件夹的快捷方式这个方法是行不通的。

下面是正确的操作步骤:

打开boot2docker虚拟机GUI,点击“设置”-“共享文件夹”,在“固定分配”菜单右键“添加共享文件夹”,如图:

VitualBox ShareFolder

a. 执行boot2docker ssh 进入虚拟机,先确定要挂载到的目录,若目录不存在需要手动创建:

<code>boot2docker ssh
<span>sudo</span> mkdir -p /f/projects/phpdev</code>

b. 创建要挂载到的目录后,执行以下命令进行共享文件夹挂载。

<code><span>sudo</span> mount -t vboxsf f/projects/phpdev  /f/projects/phpdev</code>

<code>sudo mount <span>-t</span> vboxsf <span>-o</span> uid<span>=</span><span>1000</span>,gid<span>=</span><span>50</span> f/projects/phpdev  /f/projects/phpdev</code>

如下图:

Docker for Windows安裝與Linux+PHP開發環境建置(一)

mount完成后退出, boot2docker ssh重新进入虚拟机,查看宿主机共享文件夹是否同步到挂载目录。

从图中可以看到,宿主机本地目录F:\projects\phpdev下的文件/文件夹已经同步显示到当前虚拟机挂载目录下,即/f/projects/phpdev路径下。

由于下文步骤六的docker容器是将/f/projects/phpdev挂载到容器Linux环境的/var/www/html路径,这一步操作就是为了接下来步骤做准备。

我们一般情况下,为了保证数据安全性和完整性,不会在docker创建的容器环境中永久保存数据。常见的方法是将本地宿主机的文件系统映射到容器环境的文件系统,这样能确保容器环境中生成的数据直接保存在用户主机的磁盘,而不会由于容器损坏或未及时将容器持久化而造成数据丢失。

根据boot2docker官方(https://github.com/boot2docker/boot2docker)的描述,boot2docker内置了一个专门用于虚拟机文件夹共享的客户端增强包(VirtualBox Guest Additions)。

若以下共享文件夹名称存在,则该共享文件夹则自动挂载到以下位置:

Users 挂载到 /Users
/Users挂载到 /Users
c/Users挂载到 /c/Users
/c/Users挂载到 /c/Users
c:/Users挂载到 /c/Users

如果需要共享其他文件路径,则需要执行以下命令:

<code>boot2docker ssh
sudo mount <span>-t</span> vboxsf your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location</code>

<code>boot2docker ssh
mount <span>-t</span> vboxsf <span>-o</span> uid<span>=</span><span>1000</span>,gid<span>=</span><span>50</span> your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location</code>

注:Linux命令id可查看用户的UID(对应/etc/passwd)和GID(对应/etc/group)

不过,如果重启Windows,这些设置会被清除,需要再次进行挂载操作(当然,直接重启boot2docker-vm同样会清除所有配置数据)。如果你不想每一次都手动挂载,可以在/etc/fstab中添加一项

<code>your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location vboxsf rw,gid<span>=</span><span>100</span>,uid<span>=</span><span>1000</span>,auto <span>0</span><span>0</span></code>

<code>your<span>-other</span><span>-share</span><span>-name</span> /some/mount/location vboxsf defaults <span>0</span><span>0</span></code>

这样就能够自动挂载了(需要安装客户端增强包VirtualBox Guest Additions)。

执行完手动挂载命令,正常情况下,/some/mount/location目录下已经可以显示共享文件夹的内容了。

由于boot2docker本身是虚拟机,docker也作为虚拟机环境,要使用docker run -v path1:path2成功挂载,实际需要进行两步映射:共享文件夹先由宿主机挂载到boot2docker虚拟机,再由boot2docker虚拟机挂载到docker容器环境。

挂载前先建立挂载目录:

<code><span>sudo</span> mkdir -p /some/mount/location</code>

然后再执行上述mount挂载命令。

卸载共享文件夹,使用命令sudo umount -f /f/projects/phpdev

注意:

卸载共享文件夹需要先退出挂载目录,再卸载,否则会报错:
umount: can’t forcibly umount /f/projects/phpdev: No such file or directory

同时要注意卸载目录一定要写对,注意盘符F前的斜线/,如果要卸载的目录没有挂载过,则会报错:
umount: can’t forcibly umount /f/projects/phpdev: Invalid argument

6、根据所提供镜像,创建并运行一个容器

根据拉到本地的私有镜像(Linux+Apache+PHP集成镜像),创建并运行一个容器:

<code>docker run <span>-d</span><span>-p</span><span>8000</span>:<span>80</span><span>-p</span><span>2222</span>:<span>22</span><span>--</span>name php <span>-v</span> /f/projects/phpdev:/<span>var</span>/www/html <span>local</span><span>.</span>registry<span>.</span>com:<span>5000</span>/php</code>

其中80端口是HTTP/Nginx默认端口,22端口是Linux SSH默认端口。以后台运行方式,将宿主机本地目录/f/projects/phpdev挂载到容器。

注意:

若在Windows系统的Git bash下执行会挂载失败报错,因为msysgit会将/c/Users这样的目录自动转为c:\Users,所以需要使用双斜线,Git bash中输入命令为:

<code>docker run <span>-d</span><span>-p</span><span>8000</span>:<span>80</span><span>-p</span><span>2222</span>:<span>22</span><span>--</span>name php <span>-v</span><span>//f//projects//phpdev:/var/www/html local.registry.com:5000/php</span></code>

然后,通过docker ps 命令,可以查看当前运行中的容器。

<code><span>$ </span>boot2docker.exe ip
<span>192.168</span>.<span>59.103</span></code>

我们可以通过ssh进入到当前php容器,也可使用XShell等SSH工具连接。

SSH登录命令为:

<code>ssh -p <span>2222</span> root<span>@192</span>.<span>168.59</span>.<span>103</span></code>

注:boot2docker ssh的账号密码为user/docker ,私有镜像为root/hellonihao

SSH登录后就可以看到我们熟悉的Linux目录结构了。

如果本地没有phpdev文件夹将会自动创建,在该目录下新建个phpinfo.php测试文件,用于输出php配置信息。

Docker的宿主机是boot2docker的虚拟机,因此需要使用虚拟机的ip进行访问,获取ip方式为boot2docker ip。

所以上述phpinfo.php文件访问地址:192.168.59.103:8000/phpinfo.php

Docker for Windows安裝與Linux+PHP開發環境建置(一)

举例,仅根据centos基础镜像建立一个容器,并建立一个数据卷/data,命令如下

<code><span>$</span><span>docker</span><span>run</span><span>-</span><span>it</span><span>-</span><span>-</span><span>rm</span><span>-</span><span>-</span><span>name</span><span>centos</span><span>-</span><span>-</span><span>volume=/data</span><span>local</span><span>.</span><span>registry</span><span>.</span><span>com:5000/centos</span><span>/bin/bash</span></code>

注意:在Git Bash需要用双斜线,执行

<code><span>$</span><span>docker</span><span>run</span><span>-</span><span>it</span><span>-</span><span>-</span><span>rm</span><span>-</span><span>-</span><span>name</span><span>centos</span><span>-</span><span>-</span><span>volume=//data</span><span>local</span><span>.</span><span>registry</span><span>.</span><span>com:5000/ce</span><span>ntos</span><span>//bin//bash</span></code>

将宿主机目录挂载到数据卷,命令如下:

<code>$ docker run <span>-it</span><span>--</span>rm  <span>--</span>name centos <span>-v</span> /c/Users/phpdev:/<span>data</span><span>local</span><span>.</span>registry<span>.</span>com:<span>5000</span>/centos /bin/bash </code>

注意:在Git Bash下需要用双斜线,即:

<code><span>$ </span>docker run -it --rm  --name centos -v /<span>/c/</span><span>/Users/</span><span>/phpdev:/data</span> local.registry.<span>com:</span><span>5000</span>/centos /<span>/bin/</span><span>/bash </span></code>

附其他常用命令:

docker rm -f php
docker ps -l
docker images -a
docker rmi
docker stop
docker run
docker kill

以上是docker for Windows版本的安装方法和docker使用步骤的介绍。如果有错误疏漏,欢迎留言指正,一起探讨学习docker。

下一篇会分享介绍docker安装使用中常见错误的处理方法。


参考文章:

http://docs.docker.com/userguide/ “docker官方文档-用户指南”
https://github.com/boot2docker/boot2docker “Boot2docker官方文档”
http://blog.pavelsklenar.com/5-useful-docker-tip-and-tricks-on-windows/

本文来自于CSDN博客,转载请注明出处,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了Docker for Windows安装与Linux+PHP开发环境搭建(一),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
docker中rm和rmi有什么区别docker中rm和rmi有什么区别Jul 14, 2022 am 11:02 AM

docker中rm和rmi的区别:rm命令用于删除一个或者多个容器,而rmi命令用于删除一个或者多个镜像;rm命令的语法为“docker rm [OPTIONS] CONTAINER [CONTAINER...]”,rmi命令的语法为“docker rmi [OPTIONS] IMAGE [IMAGE...]”。

docker官方镜像有哪些docker官方镜像有哪些May 12, 2022 pm 02:23 PM

docker官方镜像有:1、nginx,一个高性能的HTTP和反向代理服务;2、alpine,一个面向安全应用的轻量级Linux发行版;3、busybox,一个集成了三百多个常用Linux命令和工具的软件;4、ubuntu;5、PHP等等。

docker容器重启后数据会丢吗docker容器重启后数据会丢吗Jun 17, 2022 am 10:41 AM

docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永久存储数据。

docker是免费的吗docker是免费的吗Jul 08, 2022 am 11:21 AM

docker对于小型企业、个人、教育和非商业开源项目来说是免费的;2021年8月31日,docker宣布“Docker Desktop”将转变“Docker Personal”,将只免费提供给小型企业、个人、教育和非商业开源项目使用,对于其他用例则需要付费订阅。

docker能安装oracle吗docker能安装oracle吗Jul 08, 2022 pm 04:07 PM

docker能安装oracle。安装方法:1、拉取Oracle官方镜像,可以利用“docker images”查看镜像;2、启动容器后利用“docker exec -it oracle11g bash”进入容器,并且编辑环境变量;3、利用“sqlplus /nolog”进入oracle命令行即可。

docker存储空间不足怎么办docker存储空间不足怎么办Jul 22, 2022 pm 03:44 PM

解决方法:1、停止docker服务后,利用“rsync -avz /var/lib/docker 大磁盘目录/docker/lib/”将docker迁移到大容量磁盘中;2、编辑“/etc/docker/daemon.json”添加指定参数,将docker的目录迁移绑定;3、重载和重启docker服务即可。

有类似docker的软件吗有类似docker的软件吗May 12, 2022 pm 03:39 PM

有类似docker的软件:1、Podman,是一个无守护程序的开源Linux原生容器引擎;2、LXD,是一个专为LXC Linux容器设计的开源容器引擎;3、Buildah,是是红帽为容器化系统开发的一个OCI镜像构建工具;4、RunC等。

docker容器管理ui有哪些docker容器管理ui有哪些May 11, 2022 pm 03:39 PM

容器管理ui工具有:1、Portainer,是一个轻量级的基于Web的Docker管理GUI;2、Kitematic,是一个GUI工具,可以更快速、更简单的运行容器;3、LazyDocker,基于终端的一个可视化查询工具;4、DockStation,一款桌面应用程序;5、Docker Desktop,能为Docker设置资源限制,比如内存,CPU,磁盘镜像大小;6、Docui。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境