win10安装dockerx docker的常见命令 可以子腾讯云上做做练习
參考資料
https://www.jianshu.com/p/e8427d12b3e0
?
?
?
?
百度搜索? docker hub? 可以查找? 你需要的鏡像
https://hub.docker.com/?utm_source=getting_started_guide&utm_medium=embedded_Windows&utm_campaign=find_whalesay
https://blog.csdn.net/zzq060143/article/details/91050272
?
1.docker的安裝
環(huán)境準(zhǔn)備
Docker for Windows是一個Docker Community Edition(CE)應(yīng)用程序。Docker for Windows安裝包包含了在Windows系統(tǒng)上運行Docker所需的一切。如果你不想裝虛擬機,想直接在你的Windows操作系統(tǒng)中安裝與學(xué)習(xí)使用docker,那么你首先得查看你的系統(tǒng)是否滿足Docker for Windows的安裝與使用要求。
Docker for Windows的當(dāng)前版本運行在64位Windows 10 Pro,專業(yè)版、企業(yè)版和教育版(1607年紀(jì)念更新,版本14393或更高版本)上。Ps:家庭版是不行的,如果你是家庭版,那么一是升級到專業(yè)版,破解專業(yè)版推薦個地址:http://blog.csdn.net/SONGCHUNHONG/article/details/78006389?,二是安裝Docker Toolbox,自行網(wǎng)上百度http://blog.csdn.net/tina_ttl/article/details/51372604
如果你滿足Docker for Windows的環(huán)境條件了,那么首先檢查電腦的虛擬化開啟了沒有:進入任務(wù)管理器(ctrl+alt+delete),點擊性能->cpu ,查看虛擬化是否已啟用,如果虛擬化是已禁用,那么你需要重啟電腦進入bios開啟虛擬化(我們的發(fā)的筆記本cpu都是支持虛擬化的,重啟時進入bios按esc -> 再按f12 -> 去開啟虛擬化)
開啟虛擬化重啟后,進入任務(wù)管理器看虛擬化是否已啟用。
然后再是進入電腦的控制面板->程序->啟用或關(guān)閉Windows功能->把Hyper-v勾上,啟用后電腦會重啟,后面就可以下載并安裝Docker for Windows了。
重啟電腦
打開docker的官網(wǎng),點擊右上角的get started,進入到docker的下載頁面
?
https://hub.docker.com/editions/community/docker-ce-desktop-windows/? ? 默認(rèn)為英文翻譯為中文
下載下來900多兆吧
接下來就是安裝? ? ?沒什么問題? ?需要注冊一下的下載完成后,就會進入安裝流程,第一步會提示你是否創(chuàng)建桌面圖標(biāo),默認(rèn)是勾選的,點擊ok按鈕繼續(xù)。然后程序就開始解壓文件,開始安裝。
安裝完成后,會提示你關(guān)閉安裝程序并注銷賬號。這里的注銷賬號指的是注銷當(dāng)前登陸的windows使用戶賬號。點擊開始菜單,再點擊出現(xiàn)的個人頭像圖標(biāo),選擇注銷。
注銷后,重新登陸,就會彈出docker的啟動程序,如果系統(tǒng)沒有啟動hyper-v的話,會提示你啟動,點擊ok啟動。這個時候系統(tǒng)可能會重啟安裝hyper-v。等它重啟完畢后,在桌面的右下角就能看到docker的圖標(biāo),說明docker開始運行了。
然后我們在開始菜單上點右鍵,選擇powershell。
打開powershell后,輸入命令:
docker --version
如果安裝正常的話,會顯示出docker的版本信息,如下面第一張圖中所示。然后執(zhí)行docker的測試程序:
docker run hello-world
如果安裝沒有出錯的話,會出現(xiàn)第二張圖中的:
hello from docker
的內(nèi)容。
?
?
?
?
?
?
?
?
?
下面的參見csdn博客
https://blog.csdn.net/zzq060143/article/details/91050272
?
WIN10中DOCKER的安裝與使用
?
- WIN10中DOCKER的安裝與使用
- 1.docker的安裝
- 環(huán)境準(zhǔn)備
- 下載安裝
- 2.docker的入門
- 開始使用
- 3.docker的常用配置
- 在PowerShell中設(shè)置 tab鍵自動補全(其實用的都是cmd.exe)
- Settings
- 4.用Dockerfile定義一個鏡像
- 新建目錄文件
- 構(gòu)建鏡像
- 停止容器運行
- 5.聯(lián)系Docker Hub的常用操作
- 登錄到Docker Hub
- push鏡像
- 6.服務(wù)
- 創(chuàng)建一個docker-compose.yml文件
- 運行新的負(fù)載均衡應(yīng)用程序
- 更改應(yīng)用程序
- 關(guān)閉應(yīng)用程序和群
- 7.集群
- 了解集群
- 創(chuàng)建一個集群
- 初始化群并添加節(jié)點
- 在集群上部署應(yīng)用程序
- 8.參考文檔
- 1.docker的安裝
?
這是之前寫的一個word文檔
Author: liguo.wang
Creation Date: 2017/12/12
Last Updated: 2017/12/15
Document Ref:
Version: DRAFT 1A
1.docker的安裝
環(huán)境準(zhǔn)備
Docker for Windows是一個Docker Community Edition(CE)應(yīng)用程序。Docker for Windows安裝包包含了在Windows系統(tǒng)上運行Docker所需的一切。如果你不想裝虛擬機,想直接在你的Windows操作系統(tǒng)中安裝與學(xué)習(xí)使用docker,那么你首先得查看你的系統(tǒng)是否滿足Docker for Windows的安裝與使用要求。
Docker for Windows的當(dāng)前版本運行在64位Windows 10 Pro,專業(yè)版、企業(yè)版和教育版(1607年紀(jì)念更新,版本14393或更高版本)上。Ps:家庭版是不行的,如果你是家庭版,那么一是升級到專業(yè)版,破解專業(yè)版推薦個地址:http://blog.csdn.net/SONGCHUNHONG/article/details/78006389?,二是安裝Docker Toolbox,自行網(wǎng)上百度http://blog.csdn.net/tina_ttl/article/details/51372604
如果你滿足Docker for Windows的環(huán)境條件了,那么首先檢查電腦的虛擬化開啟了沒有:進入任務(wù)管理器(ctrl+alt+delete),點擊性能->cpu ,查看虛擬化是否已啟用,如果虛擬化是已禁用,那么你需要重啟電腦進入bios開啟虛擬化(我們的發(fā)的筆記本cpu都是支持虛擬化的,重啟時進入bios按esc -> 再按f12 -> 去開啟虛擬化)
開啟虛擬化重啟后,進入任務(wù)管理器看虛擬化是否已啟用。
然后再是進入電腦的控制面板->程序->啟用或關(guān)閉Windows功能->把Hyper-v勾上,啟用后電腦會重啟,后面就可以下載并安裝Docker for Windows了。
下載安裝
進入網(wǎng)址https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows?下載并安裝。我安裝的是穩(wěn)定版。安裝過程沒什么要注意的。
啟動以后會出現(xiàn)在桌面的右下角區(qū)域,鼠標(biāo)放上去以后顯示Docker is running表示啟動成功,第一次安裝啟用好像是會彈出個Docker Cloud登錄界面,去注冊然后登錄,使用和git有點類似,可以pull圖像等等
2.docker的入門
開始使用
檢查Docker,Compose和Machine的版本
檢查版本信息,并確保docker命令正常工作
運行docker run hello-world以測試從Docker Hub中拉取圖像并啟動容器
使用命令docker run -it ubuntu bash運行一個Ubuntu容器,我之前已經(jīng)拉取過這個容器了,大概是幾十兆吧,所以直接啟用了,輸入exit命令停止容器
運行命令docker run -d -p 80:80 –name webserver nginx 啟動一個Dockerized webserver 會下載nginx容器圖像并啟動它,然后再打開瀏覽器鍵入http://localhost
運行docker ps 命令,檢查容器的詳細(xì)信息
停止或移除容器和圖像。如果你想停止網(wǎng)絡(luò)服務(wù)器,輸入:docker stop webserver然后重新啟動docker start webserver。要使用單個命令停止并刪除正在運行的容器,請鍵入: docker rm -f webserver。這將刪除容器,但不是 nginx圖像。您可以列出本地圖像docker images。你可能想要保留一些圖片,這樣你就不必再從Docker Hub中取出它們了。要刪除不再需要的圖像,請使用docker rmi后跟圖像ID或圖像名稱。例如docker rmi nginx
3.docker的常用配置
在PowerShell中設(shè)置 tab鍵自動補全(其實用的都是cmd.exe)
Set-ExecutionPolicy RemoteSigned
應(yīng)該返回RemoteSigned。
Install-Module -Scope CurrentUser posh-docker
- 1
- 2
- 3
- 4
這將創(chuàng)建一個$PROFILE如果不存在,并將此行添加到文件中:
Import-Module posh-docker
要檢查文件是否已正確創(chuàng)建,或只需手動編輯,請在PowerShell中鍵入以下內(nèi)容:
Notepad $PROFILE
打開一個新的PowerShell會話。現(xiàn)在,當(dāng)你鍵入的前幾個字母后按Tab鍵,Docker命令(如開始,停止,運行及其選項)以及容器和映像名稱現(xiàn)在都應(yīng)該自動完成。
Settings
找到右下角的docker圖標(biāo),右擊選擇settings進去
General:這里是設(shè)置docker開機自啟,應(yīng)用程序啟動時檢查更新,發(fā)布使用情況統(tǒng)計信息
Advanced:分配cpu數(shù)量與內(nèi)存量
Daemon:Docker for windows10 可以配置阿里云鏡像,到https://cr.console.aliyun.com/?注冊一個賬戶,登錄進去后再列表選擇加速器,把你的專屬加速器地址復(fù)制粘貼到Daemon的Registry mirrors中
4.用Dockerfile定義一個鏡像
在過去,如果你要開始編寫一個Python應(yīng)用程序,你的第一步就是在你的機器上安裝一個Python運行庫。但是,這會造成您的機器上的環(huán)境必須滿足一定條件以使您的應(yīng)用程序可以運行。
使用Docker,你可以將一個可移植的Python運行庫作為一個映像,不需要安裝。然后,您的構(gòu)建可以將基礎(chǔ)Python鏡像與應(yīng)用程序代碼一起包括在內(nèi),確保您的應(yīng)用程序,依賴項和運行時都一起運行。
這些可移植的鏡像是由一個叫做Dockerfile的東西來定義的
新建目錄文件
創(chuàng)建一個空目錄,我取名叫docker,然后分別在里面新建三個文件:Dockerfile,app.py,requirements.txt
三個文件中的內(nèi)容分別設(shè)計為:
1.Dockerfile: # Use an official Python runtime as a parent image FROM python:2.7-slim# Set the working directory to /app WORKDIR /app# Copy the current directory contents into the container at /app ADD . /app# Install any needed packages specified in requirements.txt RUN pip install --trusted-host pypi.python.org -r requirements.txt# Make port 80 available to the world outside this container EXPOSE 80# Define environment variable ENV NAME World# Run app.py when the container launches CMD ["python", "app.py"]2.app.py: from flask import Flask from redis import Redis, RedisError import os import socket# Connect to Redis redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)app = Flask(__name__)@app.route("/") def hello():try:visits = redis.incr("counter")except RedisError:visits = "<i>cannot connect to Redis, counter disabled</i>"html = "<h3>Hello {name}!</h3>" \"<b>Hostname:</b> {hostname}<br/>" \"<b>Visits:</b> {visits}"return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)if __name__ == "__main__":app.run(host='0.0.0.0', port=80)3. requirements.txt: Flask Redis- 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
構(gòu)建鏡像
在docker目錄下打開cmd.exe運行命令(確保能夠找到Dockerfile文件,鏡像取名叫friendlyhello):
docker build -t friendlyhello .
ps:千萬不要落了上面那行后面的那個點,曾經(jīng)入過坑的。。命令包括后面的那個點
然后再執(zhí)行命令:
docker images
運行鏡像程序:
docker run -p 4000:80 friendlyhello
可以看到Python正在為應(yīng)用程序提供消息的http://0.0.0.0:80。但是,這個消息來自容器內(nèi)部,它不知道我們將該容器的端口80映射到4000,從而打開URL:?http://localhost:4000
停止容器運行
首先在接著上面的操作步驟后按下ctrl+c在終端退出,這并不意味著鏡像停止運行了
鍵入docker container ls 列出正在運行的容器
運行命令:
docker container stop <Container NAME or ID>
停止容器。否則,在下一步中重新運行容器時,將會收到錯誤響應(yīng)。
5.聯(lián)系Docker Hub的常用操作
登錄到Docker Hub
前面已經(jīng)說過了,docker和git的操作有類似之處,所以docker也
有遠程倉庫,如果前面已經(jīng)注冊過并登錄了docker cloud,那么
訪問網(wǎng)址:https://hub.docker.com?在里面創(chuàng)建存儲庫,否則先
注冊吧。
push鏡像
前面在本地創(chuàng)建了一個friendlyhello的鏡像,現(xiàn)在要把它push到
自己的docker hub的存儲庫中去,首先:
1. 登錄docker hub (我已經(jīng)登錄過了。。再登錄一次吧)
2. 標(biāo)記鏡像:
把鏡像放入wangliguo存儲庫并標(biāo)記為test
3. 查看鏡像:
4. 發(fā)布鏡像(推送鏡像)
5. Docker Hub上查看鏡像:
6. 從遠程存儲庫中提取并運行鏡像:現(xiàn)在當(dāng)遠程存儲庫有了鏡像后,就可以從遠程存儲庫提取并運行了
6.服務(wù)
在分布式應(yīng)用程序中,應(yīng)用程序的不同部分被稱為“服務(wù)”。例如,想象一個視頻共享站點,它可能包括用于將應(yīng)用程序數(shù)據(jù)存儲在數(shù)據(jù)庫中的服務(wù),用于用戶上傳東西的視頻轉(zhuǎn)碼服務(wù),為前端服務(wù)等等。
服務(wù)實際上只是“生產(chǎn)中的容器”。服務(wù)只運行一個鏡像,但它編碼鏡像運行的方式 - 應(yīng)該使用哪個端口,容器應(yīng)該運行多少個副本,以便服務(wù)具有所需的容量,以及等等。縮放服務(wù)會更改運行該軟件的容器實例的數(shù)量,從而為流程中的服務(wù)分配更多的計算資源。
使用Docker平臺定義,運行和擴展服務(wù)非常簡單 - 只需編寫一個docker-compose.yml文件即可。
創(chuàng)建一個docker-compose.yml文件
鍵入:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
拉取的是上個步驟中的存儲庫的tag。
運行該鏡像的5個實例作為一個服務(wù)調(diào)用web,限制每個使用,最多10%的CPU(跨所有核心)和50MB的RAM。
如果一個失敗,立即重新啟動容器。
將主機上的端口80映射到web端口80。
指導(dǎo)web容器通過一個負(fù)載平衡的網(wǎng)絡(luò)共享80端口webnet。(在內(nèi)部,容器本身將web在臨時端口上發(fā)布到 端口80)。
webnet使用默認(rèn)設(shè)置(這是一個負(fù)載平衡覆蓋網(wǎng)絡(luò))定義網(wǎng)絡(luò)。
運行新的負(fù)載均衡應(yīng)用程序
先運行命令:docker swarm init
然后再運行命令:docker stack deploy -c docker-compose.yml getstartedlab
給它取名叫g(shù)etstartedlab
服務(wù)堆棧在這臺主機上運行了5個部署鏡像的容器實例
運行命令查看:docker service ls
在服務(wù)中運行的單個容器稱為任務(wù),可以看到上面有個getstartedlab_web的服務(wù)
運行命令docker service ps getstartedlab_web 查看此服務(wù)下的任務(wù):
如果只列出系統(tǒng)中的所有容器,也會顯示任務(wù),但不會被服務(wù)過濾:
運行命令:docker container ls -q
然后打開瀏覽器,鍵入http://localhost
點擊刷新多次,可以發(fā)現(xiàn)Hostname的更改,以循環(huán)方式選擇5個任務(wù)中的一個來響應(yīng)。容器ID將與前一個命令(docker container ls -q)的輸出相匹配。
更改應(yīng)用程序
比如更改docker-compose.yml中的replicas值,保存更改并重新運行docker stack deploy命令來更新應(yīng)用程序:
運行命令:
docker stack deploy -c docker-compose.yml getstartedlab
Docker會做一個就地更新,然后重新運行docker container ls -q以查看重新配置的已部署實例
可以看到之前是6個,現(xiàn)在是7個,剛好多了一個任務(wù)
ps:電腦中還運行這之前步驟中從docker hub中拉取并運行著的那個任務(wù),所以會看到6個和7個
關(guān)閉應(yīng)用程序和群
關(guān)閉應(yīng)用程序docker stack rm getstartedlab
關(guān)閉群docker swarm leave –force
現(xiàn)在服務(wù)中的任務(wù)都關(guān)閉了以后再運行命令:
docker container ls -q
這就是上面說的那個之前步驟中從docker hub中拉取并運行著的那個任務(wù)
7.集群
了解集群
swarm是運行Docker并加入到一個集群中的一組機器。但是現(xiàn)在它們將由群集管理器在群集上執(zhí)行。群體中的機器可以是物理的或虛擬的。加入群體后,他們被稱為節(jié)點。
Swarm管理人員可以使用多種策略來運行容器,比如“最空的節(jié)點”(emptiest node) - 它使用容器填充最少使用的機器。或“全局”,這確保了每臺機器只能得到指定容器的一個實例。您可以指示swarm manager在Compose文件中使用這些策略。
群體管理者是群體中唯一可以執(zhí)行你的命令的機器,或者授權(quán)其他機器作為工作者加入群體。工人提供能力,并沒有權(quán)力告訴任何其他機器可以做什么和不可以做什么。
到目前為止,之前都是在本地機器上以單主機模式使用Docker。但是Docker也可以切換到群集模式,這就是使用群集的原因。啟用群模式使當(dāng)前機器成為群管理器。則Docker將運行您正在管理的群集上執(zhí)行的命令,而不僅僅是在當(dāng)前的機器上。
創(chuàng)建一個集群
一個群由多個節(jié)點組成,可以是物理機或虛擬機。基本的概念很簡單:運行docker swarm init啟用群模式,使當(dāng)前的機器成為群管理器,然后docker swarm join在其他機器上運行 ,讓它們作為工人加入群體。下面將使用虛擬機快速創(chuàng)建一個雙機群集,并將其變成群集。
步驟:
1. 以管理員運行cmd.exe 這里必須是管理員運行,不然后續(xù)操作權(quán)限不夠
2. 運行docker swarm init啟用群模式,使當(dāng)前的機器成為群管理器,然后docker swarm join在其他機器上運行 ,讓它們作為工人加入群體。
3. 啟動Hyper-V管理器
點擊開始?windows管理工具?Hyper-V管理器
4. 單擊右側(cè)菜單中的虛擬交換機管理器
5. 單擊創(chuàng)建類型為外部網(wǎng)絡(luò)的虛擬交換機,給它的名稱myswitch,并檢查框共享您的主機的活動網(wǎng)絡(luò)適配器
6. 使用節(jié)點管理工具創(chuàng)建幾個虛擬機docker-machine:
docker-machine create -d hyperv –hyperv-virtual-switch “myswitch” myvm1
docker-machine create -d hyperv –hyperv-virtual-switch “myswitch” myvm2
之前我已經(jīng)創(chuàng)建過了,所以我現(xiàn)在再新建兩個:myvm3 和 myvm4
docker-machine create -d hyperv –hyperv-virtual-switch “myswitch” myvm3
docker-machine create -d hyperv –hyperv-virtual-switch “myswitch” myvm4
7. 現(xiàn)在創(chuàng)建了兩個虛擬機,分別命名為myvm3和myvm4。使用命令
docker-machine ls 列出機器并獲取其IP地址。
初始化群并添加節(jié)點
先使用命令docker-machine ssh myvm3
然后讓myvm3 成為一個管理員:docker swarm init
注意紅框中的內(nèi)容,這是后面的myvm4 加入集群要執(zhí)行的命令
運行命令:docker node ls
可以看到myvm3 已經(jīng)成為管理員了
以管理員身份再運行一個cmd.exe.然后運行命令:docker-machine ssh myvm4
然后再運行命令:(這就是上一頁中圖片里紅框中的內(nèi)容,下面的token是我這里的,正常運行到這里的時候是去myvm3的docker swarm init命令中把紅框框位置里的命令復(fù)制粘貼過來執(zhí)行)
- 1
然后再切換到myvm3 的cmd.exe中執(zhí)行命令:docker node ls
可以看到,我們已經(jīng)創(chuàng)建了一個簡單的集群。、
附離開群命令:docker swarm leave
在集群上部署應(yīng)用程序
docker-machine為swarm管理器配置一個shell
運行命令:docker-machine env myvm3
注意最后一行的內(nèi)容
我這里是@FOR /f "tokens=*" %i IN ('docker-machine env myvm3') DO @%i
復(fù)制粘貼運行它
再運行docker-machine ls以驗證它myvm3 是否為活動機器
在swarm管理器上部署應(yīng)用程序
以部署我們之前docker-compose.yml服務(wù)為例
首先在這個以管理員身份打開的cmd中進入到docker-compose.yml文件的所在的目錄中去,我的因為在D/docker中,如果不過來,那么執(zhí)行命令:
docker stack deploy -c docker-compose.yml getstartedlab會出現(xiàn):
進入目錄后執(zhí)行上面那條命令:
再執(zhí)行命令docker stack ps getstartedlab 查看服務(wù)詳情:
如果發(fā)現(xiàn)state存在shutdown的情況(也有可能出現(xiàn)你的圖片上的實例數(shù)量大于你在服務(wù)文件中定義的數(shù)量的情況,這都是我爬過的坑,現(xiàn)在我這里定義的是6,圖片上也是6,),那應(yīng)該是你在之前服務(wù)哪一章運行過命令:
docker stack deploy -c docker-compose.yml getstartedlab 而沒有把getstartedlab移除掉
這時應(yīng)該執(zhí)行命令:docker stack rm getstartedlab 把getstartedlab移除掉
Ps:我是d,c盤都執(zhí)行了這個命令,因為之前運行docker stack deploy -c docker-compose.yml getstartedlab命令是在d盤的時候
然后重新運行:docker stack deploy -c docker-compose.yml getstartedlab 和
docker stack ps getstartedlab 就好了
瀏覽器訪問集群的網(wǎng)址:
如圖紅框框所示,瀏覽器上訪問其中的任何一個,然后刷新,將看到6個可能的容器ID,它們都是隨機循環(huán)的,展示了負(fù)載平衡
- 1
- 2
- 3
- 4
- 5
- 6
- 7
8.參考文檔
https://docs.docker.com/
http://blog.csdn.net/tina_ttl/article/details/51372604
http://blog.csdn.net/u011686226/article/details/53906976
http://blog.csdn.net/heatdeath/article/details/70432417
http://blog.csdn.net/fromsilence520/article/details/73480219
轉(zhuǎn)自:https://blog.csdn.net/hunan961/article/details/79484098
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的win10安装dockerx docker的常见命令 可以子腾讯云上做做练习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python_jihuo
- 下一篇: 姓罗的女孩子叫什么名字好(知书达理的罗姓