日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

docker從安裝入門到應用部署及私有倉庫搭建基礎命令_docker

作者:Jeff的技術棧 ? 更新時間: 2022-06-13 編程語言

Docker

入門到精通

ssh root@39.101.184.220
"""
1)docker就是Linux上及其輕量的虛擬機
2)虛擬機是存在宿主系統中,通過鏡像給宿主系統拓展子系統的(一個鏡像理論上可以做n個子系統)
3)兩個特別重要的概念
	image:鏡像
	container:容器(子系統)
4)工作方式:
	i)在服務器系統下載docker(為服務器安裝虛擬機,服務器系統就是宿主系統)
	ii)用docker去下載對應需求的鏡像:鏡像操作
	iii)通過鏡像制造容器(裝子系統):容器操作
5)優勢
	i)超級輕量級,docker安裝的容器體積可以按kB度量
	ii)集群部署,docker可以通過一個鏡像制造出多個一模一樣的容器
	iii)便捷管理所有鏡像與容器(命令行操作)
6)鏡像和容器特點
	一般一個鏡像中只包含一種軟件:比如mysql鏡像,創建的容器中只有mysql環境;redis鏡像,創建的容器中只有redis環境
	注:一個鏡像中有多個環境的需要自己制作鏡像
"""
docker-ce : 免費(使用最多)
docker-ee :收費

CentOS安裝Docker

方法一

設置管理Docker的倉庫

"""
1)安裝依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2)安裝穩定倉庫
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)創建容器
>: docker run [選項參數] 鏡像名 [命令]
創建容器命令:docker run
-i:表示運行容器
-t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即分配一個偽終端。
--name :為創建的容器命名。容器名字不能重
-v:表示目錄映射關系(前者是宿主機目錄,后者是容器的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。
-d:在run后面加上-d參數,則會創建一個守護式容器在后臺運行(這樣創建容器后不會自動登錄容器,如果只加-i -t兩個參數,創建后就會自動進去容器)。
-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端口沒有服務在監聽)
>: docker  exec 參數 容器id bash
eg: docker exec -it mycentos7 bash
eg: docker exec -it 685e1 bash
eg: docker exec mycentos2_2 ls  # 在mycentos2_2的容器中執行ls,并打印結果
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表示環境變量,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環境
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
創建并啟動容器: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是由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像,用來構建鏡像的
# docker pull 
# 通過容器---》打包成鏡像--》壓縮--》拿到任何位置
# 通過Dockerfile構建鏡像
1、對于開發人員:可以為開發團隊提供一個完全一致的開發環境;
2、對于測試人員:可以直接拿開發時所構建的鏡像或者通過Dockerfile文件構建一個新的鏡像開始工作了;
3、對于運維人員:在部署時,可以實現應用的無縫移植。

docker file常用命令

命令	作用
FROM image_name:tag	定義了使用哪個基礎鏡像啟動構建流程  # FROM 鏡像名:版本
MAINTAINER user_name	聲明鏡像的創建者
ENV key value	設置環境變量 (可以寫多條)
(核心)RUN command	是Dockerfile的核心部分(可以寫多條)
    eg:寫要執行的命令(centos上裝一個python3.6,原來在linux上裝python,如何操作,就用命令一行一行寫出來)
        RUN wget http://www..../python.tar.gz
        RUN tar -cvf python.tar.gz
        RUN cd python
        RUN make &amp;&amp; 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 [命令]    容器一運行,就會執行命令
# ADD和COPY的區別?一個會解壓,一個默認不會解壓


eg:基于python3.6構建docker file鏡像

# 寫一個Dockerfile,基于python3.6 搭建運行環境: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的配置文件)
# 創建幾個文件夾
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;  # 負載均衡,隨機分發請求
        }  
        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 (文件如果沒有就創建出來),以后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)創建容器: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)創建容器
>: 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
"""

原文鏈接:https://www.cnblogs.com/guyouyin123/p/12469637.html

欄目分類
最近更新