docker從安裝入門到應(yīng)用部署及私有倉庫搭建基礎(chǔ)命令
Docker
入門到精通
ssh root@39.101.184.220 """ 1)docker就是Linux上及其輕量的虛擬機(jī) 2)虛擬機(jī)是存在宿主系統(tǒng)中,通過鏡像給宿主系統(tǒng)拓展子系統(tǒng)的(一個(gè)鏡像理論上可以做n個(gè)子系統(tǒng)) 3)兩個(gè)特別重要的概念 image:鏡像 container:容器(子系統(tǒng)) 4)工作方式: i)在服務(wù)器系統(tǒng)下載docker(為服務(wù)器安裝虛擬機(jī),服務(wù)器系統(tǒng)就是宿主系統(tǒng)) ii)用docker去下載對(duì)應(yīng)需求的鏡像:鏡像操作 iii)通過鏡像制造容器(裝子系統(tǒng)):容器操作 5)優(yōu)勢(shì) i)超級(jí)輕量級(jí),docker安裝的容器體積可以按kB度量 ii)集群部署,docker可以通過一個(gè)鏡像制造出多個(gè)一模一樣的容器 iii)便捷管理所有鏡像與容器(命令行操作) 6)鏡像和容器特點(diǎn) 一般一個(gè)鏡像中只包含一種軟件:比如mysql鏡像,創(chuàng)建的容器中只有mysql環(huán)境;redis鏡像,創(chuàng)建的容器中只有redis環(huán)境 注:一個(gè)鏡像中有多個(gè)環(huán)境的需要自己制作鏡像 """ docker-ce : 免費(fèi)(使用最多) docker-ee :收費(fèi)
CentOS安裝Docker
方法一
設(shè)置管理Docker的倉庫
""" 1)安裝依賴 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2)安裝穩(wěn)定倉庫 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo """
安裝Docker Engine-Community
""" 1)安裝 >: yum install docker-ce docker-ce-cli containerd.io 2)如果提示您接受 GPG 密鑰,請(qǐng)?jiān)试S """
方法二
""" # centos7 安裝docker 1 安裝依賴 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2 設(shè)置yum源為阿里云 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3 安裝 sudo yum install docker-ce -y """ docker 版本:裝的最新版 docker -v Docker version 19.03.8, build afacb8b docker -v查看版本,如果是17年之前的,就是老版本,操作習(xí)慣不一樣
Docker基礎(chǔ)命令
開啟關(guān)閉
""" 1)啟動(dòng) >: service docker start | systemctl start docker 2)關(guān)閉 >: service docker stop | systemctl stop docker 3)重啟 >: service docker restart | systemctl restart docker """
查找鏡像
# 查找鏡像:https://hub.docker.com/ docker search helloworld docker search centos # 拉取鏡像 docker pull centos # 拉取最新的:相當(dāng)于docker pull centos:latest docker pull centos:centos7 # 拉取一個(gè)centos7 docker pull centos:centos6.7 docker pull centos:centos10 # 這個(gè) 沒有,就報(bào)錯(cuò)
鏡像操作
""" 1)列出鏡像 >: docker image ls 2)拉取鏡像 >: docker [image] pull 鏡像名:版本 eg: docker image pull hello-world:latest # 最后一個(gè)版本 3)刪除鏡像 如果有容器了,可以強(qiáng)制刪除鏡像。不推薦這么做 >: docker image rm 鏡像ID >: docker image rm 鏡像名字:鏡像版本 # 通過名字刪除 docker image rm centos:centos7 4)將容器反向打包鏡像 >: docker save -o <文件名.tar> <鏡像名> 5)根據(jù)打包的鏡像文件加載鏡像 >: docker load -i <文件名.tar> """
容器操作
""" docker exec --help # 查看參數(shù)的含義 1)創(chuàng)建容器 >: docker run [選項(xiàng)參數(shù)] 鏡像名 [命令] 創(chuàng)建容器命令:docker run -i:表示運(yùn)行容器 -t:表示容器啟動(dòng)后會(huì)進(jìn)入其命令行。加入這兩個(gè)參數(shù)后,容器創(chuàng)建就能登錄進(jìn)去。即分配一個(gè)偽終端。 --name :為創(chuàng)建的容器命名。容器名字不能重 -v:表示目錄映射關(guān)系(前者是宿主機(jī)目錄,后者是容器的目錄),可以使用多個(gè)-v做多個(gè)目錄或文件映射。注意:最好做目錄映射,在宿主機(jī)上做修改,然后共享到容器上。 -d:在run后面加上-d參數(shù),則會(huì)創(chuàng)建一個(gè)守護(hù)式容器在后臺(tái)運(yùn)行(這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器,如果只加-i -t兩個(gè)參數(shù),創(chuàng)建后就會(huì)自動(dòng)進(jìn)去容器)。 -p:表示端口映射,前者是宿主機(jī)端口,后者是容器內(nèi)的映射端口??梢允褂枚鄠€(gè)-p做多個(gè)端口映射 # 演示 #基于哪個(gè)鏡像跑容器:centos:centos7 如果寫成centos表示跑最新的 #如果沒有這個(gè)鏡像呢?去遠(yuǎn)程拉,拉下來再跑,遠(yuǎn)程沒有就報(bào)錯(cuò) # 1.容器要運(yùn)行(跑完進(jìn)入了容器) docker run -it --name=mycentos7 centos:centos7 /bin/bash /bin/bash:進(jìn)入容器,并開一個(gè)終端 bash:進(jìn)入內(nèi)層終端 exit: 退出一層 # 2.以守護(hù)進(jìn)程形式跑(跑完沒有進(jìn)入容器) docker run -di --name=mycentos2_2 centos:centos7 2)查看所有容器:-a就是--all代表全部展示 >: docker container ls [-a] >: docker ps [-a] 3) 容器的啟動(dòng)與停止 docker stop 容器id/名字 docker start 容器id/名字 docker restart 容器id/名字 4)kill掉一個(gè)已經(jīng)在運(yùn)行的容器 >: docker kill 容器id 5)刪除容器 停止后才能刪除 >: docker rm 容器id 6)進(jìn)入容器 1.exec(使用最多) 2.attach 3.ssh連接(容器要啟動(dòng)ssh服務(wù)22端口沒有服務(wù)在監(jiān)聽) >: docker exec 參數(shù) 容器id bash eg: docker exec -it mycentos7 bash eg: docker exec -it 685e1 bash eg: docker exec mycentos2_2 ls # 在mycentos2_2的容器中執(zhí)行l(wèi)s,并打印結(jié)果 7)退出容器 >: exit """
文件拷貝
# 文件拷貝 # 從宿主機(jī)copy到容器內(nèi)部 docker cp untitled3.tar mycentos2_2:/home # 從容器內(nèi)部copy出來 docker cp mycentos2_2:/home/untitled3.tar ./
目錄映射(數(shù)據(jù)卷)
# 映射之后,操作宿主機(jī)目錄和操作容器目錄會(huì)相互影響 docker run -di --name=mycentos2_3 -v /root/test:/home centos:centos7 名字 宿主機(jī)/root/test映射到容器 /home 版本
查看容器信息
docker inspect 容器名字/容器id # 查看ip地址 docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/名字
docker應(yīng)用部署
# mysql服務(wù) 在docker中運(yùn)行 -e表示環(huán)境變量,root密碼 docker run -id --name=mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # redis服務(wù) 在docker中運(yùn)行 docker run -id --name=myredis -p 6379:6379 redis # docker中部署django項(xiàng)目 nginx + django +uwsgi
容器打包成鏡像
# 把容器打包成鏡像 docker run -di --name=mydjango python:3.6 # 安裝django環(huán)境 pip install django==1.11.9 apt-get update apt-get install vim # 把容器打包成鏡像 docker commit 容器名字 鏡像名字 docker commit mydjango mydjango_i # 基于鏡像再跑起容器 docker run -di --name=mydjango2 mydjango_i # 鏡像打成一個(gè)tar包,壓縮一下(在當(dāng)前目有個(gè)mydjango.tar) docker save -o 壓縮包名字.tar mydjango_i # copy這個(gè)壓縮包到任意的機(jī)器上(裝了docker) # 把壓縮包,恢復(fù)成鏡像 docker load -i 壓縮包名字.tar 容器里裝了python3.6 mysql,django, uwsgi ,redis 項(xiàng)目在里面---》鏡像--》容器 10個(gè)容器 django+uwsgi mysql redis 一個(gè)一個(gè)起:docker-compose 100臺(tái)機(jī)器,10w容器 k8s
總結(jié)
# 容器的操作 查看正在運(yùn)行的容器:docker ps 查看所有容器:docker ps -a 刪除容器:docker rm 容器id/名字 容器id/名字 支持同時(shí)刪多個(gè) 容器啟動(dòng)停止: docker stop/start/restart 容器名字/id 創(chuàng)建并啟動(dòng)容器:docker run -i -d -t --name=名字 -v 目錄映射/數(shù)據(jù)卷 -p 端口映射/網(wǎng)絡(luò) 鏡像名字:tag -鏡像如果沒有,會(huì)自動(dòng)去拉取,然后啟動(dòng) 查看容器日志:docker logs 容器id/名字 文件拷貝: docker cp 查看容器信息,ip:docker inspect 容器名稱(容器ID) 進(jìn)入容器:docker exec -it 容器id /bin/bash docker exec 容器id ls ssh attach
Docker file編寫
Dockerfile是由一系列命令和參數(shù)構(gòu)成的腳本,這些命令應(yīng)用于基礎(chǔ)鏡像并最終創(chuàng)建一個(gè)新的鏡像,用來構(gòu)建鏡像的 # docker pull # 通過容器---》打包成鏡像--》壓縮--》拿到任何位置 # 通過Dockerfile構(gòu)建鏡像 1、對(duì)于開發(fā)人員:可以為開發(fā)團(tuán)隊(duì)提供一個(gè)完全一致的開發(fā)環(huán)境; 2、對(duì)于測(cè)試人員:可以直接拿開發(fā)時(shí)所構(gòu)建的鏡像或者通過Dockerfile文件構(gòu)建一個(gè)新的鏡像開始工作了; 3、對(duì)于運(yùn)維人員:在部署時(shí),可以實(shí)現(xiàn)應(yīng)用的無縫移植。
docker file常用命令
命令 作用 FROM image_name:tag 定義了使用哪個(gè)基礎(chǔ)鏡像啟動(dòng)構(gòu)建流程 # FROM 鏡像名:版本 MAINTAINER user_name 聲明鏡像的創(chuàng)建者 ENV key value 設(shè)置環(huán)境變量 (可以寫多條) (核心)RUN command 是Dockerfile的核心部分(可以寫多條) eg:寫要執(zhí)行的命令(centos上裝一個(gè)python3.6,原來在linux上裝python,如何操作,就用命令一行一行寫出來) RUN wget http://www..../python.tar.gz RUN tar -cvf python.tar.gz RUN cd python RUN make && make install RUN pip3 install django==1.11.9 ADD source_dir/file dest_dir/file 將宿主機(jī)的文件復(fù)制到容器內(nèi),如果是一個(gè)壓縮文件,將會(huì)在復(fù)制后自動(dòng)解壓 COPY source_dir/file dest_dir/file 和ADD相似,但是如果有壓縮文件并不能解壓 WORKDIR path_dir 設(shè)置工作目錄(上面操作的命令都是在這個(gè)目錄,docker exec 進(jìn)去,就在當(dāng)前設(shè)置的路徑下,之前是在根路徑下) CMD [命令] 容器一運(yùn)行,就會(huì)執(zhí)行命令 # ADD和COPY的區(qū)別?一個(gè)會(huì)解壓,一個(gè)默認(rèn)不會(huì)解壓
eg:基于python3.6構(gòu)建docker file鏡像
# 寫一個(gè)Dockerfile,基于python3.6 搭建運(yùn)行環(huán)境:django,drf,uwsgi # 名字必須交 Dockerfile ,當(dāng)你構(gòu)建的時(shí)候,會(huì)在當(dāng)前路徑下找這個(gè)文件,自動(dòng)構(gòu)建 vim Dockerfile FROM python:3.6 MAINTAINER lqz ADD ./django_test.tar /home RUN pip install -r /home/django_test/requirement.txt -i https://pypi.doubanio.com/simple CMD ["/bin/bash"] # 基于docker file構(gòu)建 docker build -t='django1.11.9' # django1.11.9就是構(gòu)建完之后的鏡像名字 構(gòu)建完之后就有一個(gè)django1.11.9的鏡像 # 基于該鏡像構(gòu)建容器 docker run -di --name=myproject -p 8080:8080 django1.11.9 # docker logs myproject 查看報(bào)錯(cuò)信息
容器部署項(xiàng)目,用 nuginx做負(fù)載均衡
# 1 在項(xiàng)目路徑下寫Dockerfile FROM python:3.6 MAINTAINER lqz ADD ./requirement.txt /home/ RUN pip install -r /home/requirement.txt -i https://pypi.douban.com/simple/ WORKDIR /home/django_test EXPOSE 8080 VOLUME ["/home"] CMD ["uwsgi", "--ini", "/home/django_test/uwsgi.ini"] # 2 在項(xiàng)目路徑下寫一個(gè)uwsgi.ini [uwsgi] #也可以使用http http=0.0.0.0:8080 #配置項(xiàng)目路徑,項(xiàng)目的所在目錄 chdir=/home/django_test #配置wsgi接口模塊文件路徑 wsgi-file=django_test/wsgi.py #配置啟動(dòng)的進(jìn)程數(shù) processes=4 #配置每個(gè)進(jìn)程的線程數(shù) threads=2 #配置啟動(dòng)管理主進(jìn)程 master=True #配置存放主進(jìn)程的進(jìn)程號(hào)文件 pidfile=uwsgi.pid # 3 傳到git上(我們直接復(fù)制過去了) 在服務(wù)器從git上拉下來,解壓開 # 4 基于docker file構(gòu)建鏡像 docker build -t='django1.11.9' . #5 運(yùn)行起django+uwsgi的容器 docker run -di --name=mydjango1 -v /home/s13/myproject:/home -p 8080:8080 django1.11.9 docker run -di --name=mydjango2 -v /home/s13/myproject2:/home -p 8088:8080 django1.11.9 # 6 基于ngixn鏡像跑起一個(gè)容器來,做目錄映射(在宿主機(jī),修改nginx的配置文件) # 創(chuàng)建幾個(gè)文件夾 mkdir -p /home/nginx/conf /home/nginx/html /home/nginx/logs vim /home/nginx/conf/nginx.conf #寫入 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream node { # node名字隨便取,下面需要用到 server 101.133.225.166:8080; # 1號(hào)服務(wù)器 server 101.133.225.166:8088; # 2號(hào)服務(wù)器 } server { listen 80; server_name localhost; location / { #負(fù)載均衡配置 proxy_pass http://node; # 負(fù)載均衡,隨機(jī)分發(fā)請(qǐng)求 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } docker run --name nginx -id -p 80:80 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/html:/etc/nginx/html -v /home/nginx/logs:/var/log/nginx nginx #7 訪問http://101.133.225.166/, 會(huì)打到不通的docker容器內(nèi),即便有一個(gè)服務(wù)停了,也不會(huì)影響項(xiàng)目的運(yùn)行 # 因?yàn)槟鉪jango docker容器做了目錄映射---》只需要修改代碼,重啟容器即可(git pull 即可) # 不停服更新,停一半,更新,啟動(dòng)--在把另一半更新了 # 停服更新
Docker私有倉庫搭建
# 鏡像獲?。? docker pull dockerfile構(gòu)建 拷貝tar文件,load過來 # 公司內(nèi)部用的鏡像,docker hub上沒有,私服(私有服務(wù)器) # 操作步驟 # 1 拉一個(gè)registry鏡像 (本質(zhì)是個(gè)什么?web服務(wù)(想像成 web項(xiàng)目在里面)) docker pull registry # 2 跑起容器來 docker run -di --name=registry -p 5000:5000 registry # 3 瀏覽器輸入地址(目前是空的) http://宿主機(jī):5000/v2/_catalog # 4 vi /etc/docker/daemon.json (文件如果沒有就創(chuàng)建出來),以后docker pull 先從自己配置的這個(gè)拉,再去遠(yuǎn)程拉 {"insecure-registries":["10.0.0.200:5000"]} # 宿主機(jī)地址 # 5 重啟docker 服務(wù) systemctl restart docker # 6 啟動(dòng)容器 docker restart registry # 7 標(biāo)記本地的鏡像(可能是dockerfile構(gòu)建的,也可能是通過容器打包成的) docker tag django1.11.9 101.133.225.166:5000/django1.11.9 # docker tag redis 101.133.225.166:5000/myredis # 8 把標(biāo)記好的本地鏡像,傳到私服 docker push 101.133.225.166:5000/django1.11.9 #docker push 101.133.225.166:5000/myredis # 9 再訪問這個(gè)地址http://宿主機(jī):5000/v2/_catalog 就能看到你上次的鏡像再里面了 # 10 只要在etc/docker/daemon.json,配置了這個(gè){"insecure-registries":["101.133.225.166:5000"]} 的所有小伙伴,都可以拉取我上傳的鏡像 docker pull 101.133.225.166:5000/myredis # 公司可能沒有私服,直接通過dockerfile構(gòu)建 # 大一點(diǎn)的公司,搭建私有倉庫,里面放了一些鏡像(不讓你去docker hub下了,直接只從私有倉庫下載)
Docker安裝Mysql
""" 1)安裝 >: docker image pull mysql:5.7 >: 如果報(bào)錯(cuò)m1安裝:docker pull --platform linux/x86_64 mysql 2)創(chuàng)建容器:root根用戶的密碼MYSQL_ROOT_PASSWORD采用的是root >: docker container run -itd -p3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 docker run -id --name=mysql3308 -p3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 注:本地測(cè)試 >: mysql -hIP -P端口 -uroot -p密碼 >: mysql -h 39.99.192.127 -P 3306 -u root -p >: root >: create database luffy default charset=utf8; >: grant all privileges on luffy.* to 'luffy'@'%' identified by 'Luffy123?'; >: grant all privileges on luffy.* to 'luffy'@'localhost' identified by 'Luffy123?'; >: flush privileges; """
docker內(nèi)部mysql允許外部訪問
M1拉鏡像:docker pull --platform linux/x86_64 mysql 先進(jìn)入到mysql容器內(nèi)部,并登陸mysql -uroot -p use mysql; update user set authentication_string = password('123456') where user = 'root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456' WITH GRANT OPTION; 用戶名:root 密碼:123456
Docker安裝Redis
""" 1)下載鏡像 >: docker pull redis:4.0.9 2)創(chuàng)建容器 >: docker container run -itd -p6379:6379 redis:4.0.9 ## : -p宿主端口(服務(wù)器):容器端口(通過鏡像安裝的) 3)進(jìn)入容器 >: docker container exec -it <容器名稱/容器ID> bash eg: docker exec -it 685e1 bash 4)測(cè)試 >: redis-cli >: redis-cli -h 39.99.192.127 -p 6379 >: config set requirepass Admin123 """
以上就是docker從安裝入門到應(yīng)用部署及私有倉庫搭建基礎(chǔ)命令的詳細(xì)內(nèi)容,更多關(guān)于docker安裝應(yīng)用部署私有倉庫搭建命令的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)
這篇文章主要介紹了解決docker網(wǎng)絡(luò)錯(cuò)誤(network bridge not found)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08docker-compose啟動(dòng)mongo容器的使用
這篇文章主要介紹了docker-compose啟動(dòng)mongo容器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Docker Consul概述以及集群環(huán)境搭建步驟(圖文詳解)
本文主要介紹了Docker-Consul概述以及集群環(huán)境搭建步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Docker復(fù)制現(xiàn)有容器的實(shí)現(xiàn)方法
在使用Docker進(jìn)行應(yīng)用開發(fā)和部署時(shí),我們經(jīng)常需要基于現(xiàn)有的容器創(chuàng)建相似的環(huán)境,本文主要介紹了Docker復(fù)制現(xiàn)有容器的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Docker開啟遠(yuǎn)程連接并實(shí)現(xiàn)安全通信詳解
這篇文章主要為大家介紹了Docker開啟遠(yuǎn)程連接并實(shí)現(xiàn)安全通信過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08