這篇文章為大家帶來了關於docker快速入門的相關知識,其中包括常用操作命令、鏡像操作命令、容器操作命令等相關問題,希望對大家有幫助。
2022年了,咱前端花點時間學點docker,不吃虧不上當
還沒了解過docker嗎,沒關係,咱模擬幾個場景,兩分鐘就給你搞明白它是什麼,我們什麼時候需要它
接著我們拿剩下的七、八分鐘用docker來同時部署vue2、vue3兩個項目,對就是這麼快!
場景模擬1:單機
在公司勤勤懇懇的你很快得到了領導的認可,這天他讓你接手這下面幾個新項目,你需要將它們安裝在自己的電腦上
#慧眼的你發現,這裡有多個不同版本的nodejs和mysql:還好,對我來說小意思
場景模擬2:多機
此時公司新來了3個前端實習生和新人,領導要你把這幾個專案也給他們安裝在本地電腦運行
由於公司歷史等原因,暫時只能給他們配置了不同作業系統的電腦:win7、win10、OSX等等
現在你需要把這幾個項目分別安裝在幾台電腦的不同作業系統上,看圖
#機智的你發現,你的頭現在一個比兩個大
「安裝麻煩費時間,新來的人做專案的時候,還得針對不同專案去切換匹配的版本來用,容易犯錯這也給主機環境造成污染這也給主機環境造成污染,一想到未來還有更多的專案要這麼搞,這時候可能有人已經想跑路了」
#辛辛苦苦安裝完成後,看你這麼給力,領導又讓你在公司內部網路的兩台小型伺服器上部署一下這幾個項目,做公共的開發和測試環境,哦對這兩台伺服器是linux的,你是不是準備開始百度如何在linux 安裝node 和mysql了?而且還是要安裝多個版本的。要是這兩台伺服器的linux系統還不同呢?
現在到輪到你想提桶了吧
3 docker出場
別慌,這時候docker出場了,它能幫你抹平不同系統的應用程式安裝差異
等等,那為啥不用虛擬機器?
因為虛擬機啟動慢、損耗大、佔用資源多,在不同系統上的遷移/拓展比較複雜
但是docker它不會啊,它啟動是秒級的,佔用資源少,香不香,跨平台還方便複製
寫好配置後,它一個命令就在電腦上同時安裝不同版本的nodej、msyql、nginx 等而且是互相隔離獨立同時運行,這時候還不需要你手動來回切換
上面的問題不就輕鬆解決了嗎,現在你對docker感興趣了沒
現在我們開始來了解docker的基礎吧
docker 分幾個概念:映像、容器、倉庫
映像:就是像是我們裝置時候需要的系統磁碟或系統鏡像文件,這裡它負責創建docker容器的,有很多官方現成的映像:node、mysql、monogo、nginx可以從遠端倉庫下載
容器:可以比擬成一個迷你的系統,例如一個只安裝mysql5.7的linux最小系統,當然你喜歡也可以把mysql、node安裝在同一個容器中,記住,容器與容器,容器和主機都是互相隔離的
倉庫:倉庫就像是github那樣的,我們可以製作鏡像然後push 提交到雲端的倉庫,也可以從倉庫pull 下載鏡像
# docker的安裝很簡單,win、osx都是圖形介面安裝,linux的也幾行命令,現在的mac的m1晶片系列也支援了,這裡我們先略過安裝步驟,要快!先看完!
ps:在m1晶片的docker上安裝mysql需要稍加點配置
安裝好運行下方程式碼查看
docker -v
安裝好docker後,我們現在來實戰了,搓搓手
我們要讓電腦同時運行nodejs10和nodejs12多個版本
ps: 咱先快速入門,我們暫時先把不同版本的mysql安裝放一邊哈
先跟著一起做,咱後面再解釋
#現在新建一個檔案放我們的專案:命名為:my-repository
#安裝vue2 webpack專案
# 0 命令行进入到该文件夹的位置: cd /你的电脑具体的文件路径/my-repository # 1.现在安装vue-cli npm install -g @vue/cli # 2.查看vue-cli安装成功否 vue --version #我这里是@vue/cli 4.5.15 # 3. 用vue-cli快速创建项目,安装选项我们如下 # > ❯ Default ([Vue 2] babel, eslint) # > ❯ npm包管理 vue create my-app-vue2
安裝vue3 vite專案
#先安装vite最新版npm init vite@latest# 创建vue3项目npm init vite@latest my-app-vue3 --template vue
//vite需要开启网络访问//vite.config.js 开启hostexport default defineConfig({ plugins: [vue()],+ server: {+ host: '0.0.0.0',+ },});
#安装完成后我们的目录是这样的my-repository ├── my-app-vue2 │ ├── public │ └── src │ ├── assets │ └── components └── my-app-vue3 ├── public └── src ├── assets └── components
# 0 先进入我们刚才安装了vue项目的文件夹位置 cd my-repository # 1 执行pwd可以获取当前文件夹在电脑的绝对目录 pwd # /Users/eric/my-repository # 2 运行创建docker容器1:承载 vue2+webpack+nodejs10 docker run -it -d --name myvue2 --privileged -p 8081:8080 -v /Users/eric/my-repository/my-app-vue2:/app/vue node:10.16.2 /bin/bash -c "cd /app/vue && node -v && npm install && npm run serve" # 3 运行创建docker容器2:承载 vue3+vite+nodejs12 docker run -it -d --name myvue3 --privileged -p 8080:3000 -v /Users/eric/my-repository/my-app-vue3:/app/vue node:12.22.6 /bin/bash -c "cd /app/vue && node -v && npm install && npm run dev" #运行成功后 查看容器运行情况 docker ps -a
成功运行后会出现
我们可以看到容器的启动状态、端口映射、容器名字
打开浏览器,我们访问localhost:8080和localhost:8081可以看到
如果出错可看下面第三点:[调试](###3 调试):运行如下命令查看原因
docker logs -f container_id/containe_name
上面那一坨docker run xxxxx
的代码到底是啥,现在我们就来捋顺
首先这个docker run
是可以用来创建同时启动运行容器
先换行来看 : shell 脚本太长的时候我们可以用 "\"把一行命令分成多行
docker run \ -it \ -d \ --name myvue2 \ --privileged \ -p 8081:8080 \ -v /Users/eric/my-repository/my-app-vue2:/app/vue \ node:10.16.2 \ /bin/bash -c "cd /app/vue2 && node -v && npm install && npm run serve"
这里我们使用 docker run
命令可以下载镜像 ->通过镜像创建容器 ->启动运行容器
参数解析:
参数 | 描述 |
---|---|
-d | 以守护进程的方式让容器在后台运行,在这您之 前可能使用的是pm2来守护进程 |
-it | 这里是 -i和 -t的缩写 -i:告诉 Docker 容器保持标准输入流对容器开放,即使容器没有终端连接 告诉 Docker 为容器分配一个虚拟终端 |
–name myvue2 | 将容器命名为 myvue2,这样访问和操作容 器等就不需要输入一大串的容器ID |
–privileged | 让容器的用户在容器内能获取完全root权限 |
-p 8081:8080 |
将容器的8080端口映射到宿主机的8081端口上 这样我们访问本机的localhost:8081,就是访问到容器的8080端口 因为容器都是独立运行互相隔离的,容器与容器各自的8080端口、容器跟主机各自的8080端口都不是一个东西,主机只有在这给端口做映射才能访问到容器端口 |
-v /Users/eric/my-repository/my-app-vue2:/app/vue |
将主机的my-app-vue2目录(命令行这里只能写绝对路径哈)下的内容挂载到容器的目录/app/vue内, 如果容器的指定目录有文件/文件夹,将被清空 挂载后,容器修改 /app/vue目录的内容,也是在修改主机目录/Users/eric/my-repository/my-app-vue2内容 |
node:10.16.2 |
这里是指定nodejs,版本为10.16.2的镜像来创建容器 如果不指定版本,会默认下载当前镜像的最新版本 |
/bin/bash -c “cd /app/vue2 && node -v && npm install && npm run serve” |
/bin/bash:是在让容器分配的虚拟终端以 bash 模式执行命令 -c ""cd /app/vue2 && node -v && npm install && npm run serve:只能执行一条 shell 命令,需要多个命令按需用&&、 |
docker run的运行示意图
上面代码运行成功后我们的电脑就会有两个互相隔离独立运行的docker容器
常用的调试命令 1
# 运行后按ctrl + c 可退出docker logs -f contianer_name/container_id
当然容器内正在进行编译或者发生错误甚至退出的时候,我们可用此命令查看终端输出的信息
运行成功后,查看myvue 容器的npm run serve 在终端上的实时输出信息
#查看docker container的终端输出信息 docker logs -f myvue2
常用的调试命令 2
# 打印出容器的端口映射、目录挂载、网络等等docker inspect myvue2
常用的操作命令表一栏,需要先收藏
# 搜索镜像 docker search [images_name:tag] # 下载镜像(:指定版本) docker pull [images_name:tag] # 查看本地下载的镜像 docker images # 自己构建镜像 # 根据dockerfile的路径或者url构建镜像 docker build [OPTIONS] PATH|URL|- # 查看镜像的构建历史 docker history [images_name] # 删除镜像 # 需要先删除以此镜像为基础的容器 docker rmi [images_name]
# 查看运行中的容器 # 可以查看容器ID、基础镜像、容器名称、运行状态、端口映射等 docker ps # 查看所有容器:包括停止的 docker ps -a # 查看容器的信息 # 例如端口号的映射、目录挂载 docker inspect [images_name/images_id] # 启动和停止容器 docker start/stop [container_name/container_id] # 重启容器 # 使用场景实例: # 在加入新的npm包依赖需要重新编译的时候使用重启运行编译 # nginx容器的配置更新后需要重启生效 docker restart [container_name/container_id] # 进入容器 # ps:有些容器没有bash,需要改成/bin/sh,例如mysq、mongodb的 # 退出人容器输入exit 回车键 docker exec -it [container_name/container_id] /bin/bash # 删除容器 # 在容器停止的状态才能删 docker rm [container_name/container_id] # 容器主机文件拷 # 将容器文件拷贝到主机 docker cp [container_id/container_name] : [文件目录] [主机目录] # 将主机的目录拷贝到容器 docker cp [主机目录] [container_id/container_name] : [文件目录]
如果没有合适的镜像,我们通常用Dockerfile来构建自定义镜像
发现没,上面的docker run
只能创建启动一个docker容器,我们可以用docker-compose
来一次启动多个容器,常用于单机下安装多个服务
慢点再来更新,大家有兴趣也可以先看到我用docker 部署的Jenkins自动化部署 CI/CD 环境 里面也有docker-compose的使用
推荐学习:《docker视频教程》
以上是讓人心動的docker快速入門指南(圖文詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!