docker從安裝入門到應用部署及私有倉庫搭建基礎命令
更新時間:2022年04月13日 11:17:40 作者:Jeff的技術棧
這篇文章主要為大家介紹了docker從安裝入門到應用部署及私有倉庫搭建基礎命令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
Docker
入門到精通
ssh root@39.101.184.220 """ 1)docker就是Linux上及其輕量的虛擬機 2)虛擬機是存在宿主系統(tǒng)中,通過鏡像給宿主系統(tǒng)拓展子系統(tǒng)的(一個鏡像理論上可以做n個子系統(tǒng)) 3)兩個特別重要的概念 image:鏡像 container:容器(子系統(tǒng)) 4)工作方式: i)在服務器系統(tǒng)下載docker(為服務器安裝虛擬機,服務器系統(tǒng)就是宿主系統(tǒng)) ii)用docker去下載對應需求的鏡像:鏡像操作 iii)通過鏡像制造容器(裝子系統(tǒng)):容器操作 5)優(yōu)勢 i)超級輕量級,docker安裝的容器體積可以按kB度量 ii)集群部署,docker可以通過一個鏡像制造出多個一模一樣的容器 iii)便捷管理所有鏡像與容器(命令行操作) 6)鏡像和容器特點 一般一個鏡像中只包含一種軟件:比如mysql鏡像,創(chuàng)建的容器中只有mysql環(huán)境;redis鏡像,創(chuàng)建的容器中只有redis環(huán)境 注:一個鏡像中有多個環(huán)境的需要自己制作鏡像 """ docker-ce : 免費(使用最多) docker-ee :收費
CentOS安裝Docker
方法一
設置管理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 密鑰,請允許 """
方法二
""" # centos7 安裝docker 1 安裝依賴 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 2 設置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年之前的,就是老版本,操作習慣不一樣
Docker基礎命令
開啟關閉
""" 1)啟動 >: service docker start | systemctl start docker 2)關閉 >: 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 # 拉取最新的:相當于docker pull centos:latest docker pull centos:centos7 # 拉取一個centos7 docker pull centos:centos6.7 docker pull centos:centos10 # 這個 沒有,就報錯


鏡像操作
""" 1)列出鏡像 >: docker image ls 2)拉取鏡像 >: docker [image] pull 鏡像名:版本 eg: docker image pull hello-world:latest # 最后一個版本 3)刪除鏡像 如果有容器了,可以強制刪除鏡像。不推薦這么做 >: docker image rm 鏡像ID >: docker image rm 鏡像名字:鏡像版本 # 通過名字刪除 docker image rm centos:centos7 4)將容器反向打包鏡像 >: docker save -o <文件名.tar> <鏡像名> 5)根據打包的鏡像文件加載鏡像 >: docker load -i <文件名.tar> """
容器操作
""" docker exec --help # 查看參數的含義 1)創(chuàng)建容器 >: docker run [選項參數] 鏡像名 [命令] 創(chuàng)建容器命令:docker run -i:表示運行容器 -t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創(chuàng)建就能登錄進去。即分配一個偽終端。 --name :為創(chuàng)建的容器命名。容器名字不能重 -v:表示目錄映射關系(前者是宿主機目錄,后者是容器的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。 -d:在run后面加上-d參數,則會創(chuàng)建一個守護式容器在后臺運行(這樣創(chuàng)建容器后不會自動登錄容器,如果只加-i -t兩個參數,創(chuàng)建后就會自動進去容器)。 -p:表示端口映射,前者是宿主機端口,后者是容器內的映射端口。可以使用多個-p做多個端口映射 # 演示 #基于哪個鏡像跑容器:centos:centos7 如果寫成centos表示跑最新的 #如果沒有這個鏡像呢?去遠程拉,拉下來再跑,遠程沒有就報錯 # 1.容器要運行(跑完進入了容器) docker run -it --name=mycentos7 centos:centos7 /bin/bash /bin/bash:進入容器,并開一個終端 bash:進入內層終端 exit: 退出一層 # 2.以守護進程形式跑(跑完沒有進入容器) docker run -di --name=mycentos2_2 centos:centos7 2)查看所有容器:-a就是--all代表全部展示 >: docker container ls [-a] >: docker ps [-a] 3) 容器的啟動與停止 docker stop 容器id/名字 docker start 容器id/名字 docker restart 容器id/名字 4)kill掉一個已經在運行的容器 >: docker kill 容器id 5)刪除容器 停止后才能刪除 >: docker rm 容器id 6)進入容器 1.exec(使用最多) 2.attach 3.ssh連接(容器要啟動ssh服務22端口沒有服務在監(jiān)聽) >: docker exec 參數 容器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,并打印結果 7)退出容器 >: exit """
文件拷貝
# 文件拷貝 # 從宿主機copy到容器內部 docker cp untitled3.tar mycentos2_2:/home # 從容器內部copy出來 docker cp mycentos2_2:/home/untitled3.tar ./
目錄映射(數據卷)
# 映射之后,操作宿主機目錄和操作容器目錄會相互影響 docker run -di --name=mycentos2_3 -v /root/test:/home centos:centos7 名字 宿主機/root/test映射到容器 /home 版本
查看容器信息
docker inspect 容器名字/容器id
# 查看ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/名字docker應用部署
# mysql服務 在docker中運行 -e表示環(huán)境變量,root密碼 docker run -id --name=mysql1 -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 # redis服務 在docker中運行 docker run -id --name=myredis -p 6379:6379 redis # docker中部署django項目 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 # 鏡像打成一個tar包,壓縮一下(在當前目有個mydjango.tar) docker save -o 壓縮包名字.tar mydjango_i # copy這個壓縮包到任意的機器上(裝了docker) # 把壓縮包,恢復成鏡像 docker load -i 壓縮包名字.tar 容器里裝了python3.6 mysql,django, uwsgi ,redis 項目在里面---》鏡像--》容器 10個容器 django+uwsgi mysql redis 一個一個起:docker-compose 100臺機器,10w容器 k8s
總結
# 容器的操作 查看正在運行的容器:docker ps 查看所有容器:docker ps -a 刪除容器:docker rm 容器id/名字 容器id/名字 支持同時刪多個 容器啟動停止: docker stop/start/restart 容器名字/id 創(chuàng)建并啟動容器:docker run -i -d -t --name=名字 -v 目錄映射/數據卷 -p 端口映射/網絡 鏡像名字:tag -鏡像如果沒有,會自動去拉取,然后啟動 查看容器日志:docker logs 容器id/名字 文件拷貝: docker cp 查看容器信息,ip:docker inspect 容器名稱(容器ID) 進入容器:docker exec -it 容器id /bin/bash docker exec 容器id ls ssh attach
Docker file編寫
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創(chuàng)建一個新的鏡像,用來構建鏡像的 # docker pull # 通過容器---》打包成鏡像--》壓縮--》拿到任何位置 # 通過Dockerfile構建鏡像 1、對于開發(fā)人員:可以為開發(fā)團隊提供一個完全一致的開發(fā)環(huán)境; 2、對于測試人員:可以直接拿開發(fā)時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了; 3、對于運維人員:在部署時,可以實現應用的無縫移植。
docker file常用命令
命令 作用
FROM image_name:tag 定義了使用哪個基礎鏡像啟動構建流程 # FROM 鏡像名:版本
MAINTAINER user_name 聲明鏡像的創(chuàng)建者
ENV key value 設置環(huán)境變量 (可以寫多條)
(核心)RUN command 是Dockerfile的核心部分(可以寫多條)
eg:寫要執(zhí)行的命令(centos上裝一個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 將宿主機的文件復制到容器內,如果是一個壓縮文件,將會在復制后自動解壓
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有壓縮文件并不能解壓
WORKDIR path_dir 設置工作目錄(上面操作的命令都是在這個目錄,docker exec 進去,就在當前設置的路徑下,之前是在根路徑下)
CMD [命令] 容器一運行,就會執(zhí)行命令
# ADD和COPY的區(qū)別?一個會解壓,一個默認不會解壓
eg:基于python3.6構建docker file鏡像
# 寫一個Dockerfile,基于python3.6 搭建運行環(huán)境:django,drf,uwsgi # 名字必須交 Dockerfile ,當你構建的時候,會在當前路徑下找這個文件,自動構建 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構建 docker build -t='django1.11.9' # django1.11.9就是構建完之后的鏡像名字 構建完之后就有一個django1.11.9的鏡像 # 基于該鏡像構建容器 docker run -di --name=myproject -p 8080:8080 django1.11.9 # docker logs myproject 查看報錯信息
容器部署項目,用 nuginx做負載均衡

# 1 在項目路徑下寫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 在項目路徑下寫一個uwsgi.ini
[uwsgi]
#也可以使用http
http=0.0.0.0:8080
#配置項目路徑,項目的所在目錄
chdir=/home/django_test
#配置wsgi接口模塊文件路徑
wsgi-file=django_test/wsgi.py
#配置啟動的進程數
processes=4
#配置每個進程的線程數
threads=2
#配置啟動管理主進程
master=True
#配置存放主進程的進程號文件
pidfile=uwsgi.pid
# 3 傳到git上(我們直接復制過去了)
在服務器從git上拉下來,解壓開
# 4 基于docker file構建鏡像
docker build -t='django1.11.9' .
#5 運行起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鏡像跑起一個容器來,做目錄映射(在宿主機,修改nginx的配置文件)
# 創(chuàng)建幾個文件夾
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號服務器
server 101.133.225.166:8088; # 2號服務器
}
server {
listen 80;
server_name localhost;
location / {
#負載均衡配置
proxy_pass http://node; # 負載均衡,隨機分發(fā)請求
}
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/, 會打到不通的docker容器內,即便有一個服務停了,也不會影響項目的運行
# 因為你django docker容器做了目錄映射---》只需要修改代碼,重啟容器即可(git pull 即可)
# 不停服更新,停一半,更新,啟動--在把另一半更新了
# 停服更新
Docker私有倉庫搭建

# 鏡像獲?。?
docker pull
dockerfile構建
拷貝tar文件,load過來
# 公司內部用的鏡像,docker hub上沒有,私服(私有服務器)
# 操作步驟
# 1 拉一個registry鏡像 (本質是個什么?web服務(想像成 web項目在里面))
docker pull registry
# 2 跑起容器來
docker run -di --name=registry -p 5000:5000 registry
# 3 瀏覽器輸入地址(目前是空的)
http://宿主機:5000/v2/_catalog
# 4 vi /etc/docker/daemon.json (文件如果沒有就創(chuàng)建出來),以后docker pull 先從自己配置的這個拉,再去遠程拉
{"insecure-registries":["10.0.0.200:5000"]} # 宿主機地址
# 5 重啟docker 服務
systemctl restart docker
# 6 啟動容器
docker restart registry
# 7 標記本地的鏡像(可能是dockerfile構建的,也可能是通過容器打包成的)
docker tag django1.11.9 101.133.225.166:5000/django1.11.9
# docker tag redis 101.133.225.166:5000/myredis
# 8 把標記好的本地鏡像,傳到私服
docker push 101.133.225.166:5000/django1.11.9
#docker push 101.133.225.166:5000/myredis
# 9 再訪問這個地址http://宿主機:5000/v2/_catalog
就能看到你上次的鏡像再里面了
# 10 只要在etc/docker/daemon.json,配置了這個{"insecure-registries":["101.133.225.166:5000"]} 的所有小伙伴,都可以拉取我上傳的鏡像
docker pull 101.133.225.166:5000/myredis
# 公司可能沒有私服,直接通過dockerfile構建
# 大一點的公司,搭建私有倉庫,里面放了一些鏡像(不讓你去docker hub下了,直接只從私有倉庫下載)
Docker安裝Mysql
""" 1)安裝 >: docker image pull mysql:5.7 >: 如果報錯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 注:本地測試 >: 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內部mysql允許外部訪問
M1拉鏡像:docker pull --platform linux/x86_64 mysql
先進入到mysql容器內部,并登陸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宿主端口(服務器):容器端口(通過鏡像安裝的) 3)進入容器 >: docker container exec -it <容器名稱/容器ID> bash eg: docker exec -it 685e1 bash 4)測試 >: redis-cli >: redis-cli -h 39.99.192.127 -p 6379 >: config set requirepass Admin123 """
以上就是docker從安裝入門到應用部署及私有倉庫搭建基礎命令的詳細內容,更多關于docker安裝應用部署私有倉庫搭建命令的資料請關注腳本之家其它相關文章!
相關文章
解決docker網絡錯誤(network bridge not found)
這篇文章主要介紹了解決docker網絡錯誤(network bridge not found)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Docker Consul概述以及集群環(huán)境搭建步驟(圖文詳解)
本文主要介紹了Docker-Consul概述以及集群環(huán)境搭建步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12

