docker命令:
Docker的三大核心概念:鏡像、容器、倉庫
鏡像:類似虛擬機(jī)的鏡像、用俗話說就是安裝文件。
容器:類似一個(gè)輕量級(jí)的沙箱,容器是從鏡像創(chuàng)建應(yīng)用運(yùn)行實(shí)例,
可以將其啟動(dòng)、開始、停止、刪除、而這些容器都是相互隔離、互不可見的。
倉庫:類似代碼倉庫,是Docker集中存放鏡像文件的場所。
虛擬化:虛擬化種類分為軟件虛擬化、硬件虛擬化、內(nèi)存虛擬化、網(wǎng)絡(luò)虛擬化、桌面虛擬化、服務(wù)虛擬化、虛擬機(jī)等。
docker:每個(gè)容器中都是一個(gè)完整的環(huán)境,相當(dāng)于一個(gè)操作系統(tǒng)
docker就是為微服務(wù)而生的。docker鼓勵(lì)面向服務(wù)的體系結(jié)構(gòu)和微服務(wù)架構(gòu),docker推薦單個(gè)容器值運(yùn)行一個(gè)應(yīng)用程序或進(jìn)程,形成了一個(gè)分布式的應(yīng)用程序模型。
手動(dòng)yum安裝docker:
https://www.cnblogs.com/marvin-mao/p/11264415.html
最小化安裝完成以后需要禁用防火墻以及SElinux配置
systemctl disable firewalld
systemctl stop firewalld
vim /etc/selinux/config
SELINUX=disabled
https://www.cnblogs.com/marvin-mao/p/11264415.html
docker安裝包和依賴包
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
docker組件:
? docker服務(wù)器和客戶端:c/s架構(gòu);
? docker鏡像和容器:用戶基于鏡像來運(yùn)行容器,一個(gè)鏡像可以產(chǎn)生多個(gè)類似的容器
? Registry注冊(cè)中心:dockerHub? https://hub.docker.com/? 可以下載鏡像
docker安裝與啟動(dòng):docker官網(wǎng)建議在Ubnuntu中安裝,CentOS7.x以上
啟動(dòng)虛擬機(jī),通過SecureCRT連接Linux:新建會(huì)話
安裝docker
yum包更新:? ? ? ? ? sudo yum update
安裝需要的軟件包:sudo yum install -y yum -utils device-mapper-persistent-data lvm2
設(shè)置yum源為阿里云:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-
ce/linux/centos/docker-ce.repo
安裝docker:sudo yum install docker-ce
檢查版本:? ? ? ? ? ? docker-v
設(shè)置USTC的鏡像:設(shè)置國內(nèi)鏡像站點(diǎn)
編輯文件:vi/etc/docker/deamon.json
輸入:
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
用于指定鏡像地址
docker的啟動(dòng)與停止:
systemctl命令是系統(tǒng)服務(wù)管理器指令
啟動(dòng)docker:? ? ? ? ? systemctl start docker
停止docker:? ? ? ? ? systemctl stop docker
重啟docker:? ? ? ? ? systemctl restart docker
查看docker狀態(tài):? ? ? systemctl status docker
開機(jī)啟動(dòng):? ? ? ? ? ? systemctl enable docker
查看docker概要信息:? docker info
查看docker幫助文檔:? docker --help
docker的常用命令:cd .
1、鏡像相關(guān)命令:
鏡像是存儲(chǔ)在Docker宿主機(jī)的/var/lib/docker目錄下
查看鏡像:docker images?
REPOSITORY:鏡像名稱;
TAG:鏡像標(biāo)簽;
IMAGE(鏡像的版本區(qū)分)
ID:鏡像ID(唯一);
CREATED:鏡像的創(chuàng)建日期;
SIZE:鏡像大小;
搜索鏡像:docker search 鏡像名稱 :
NAME:倉庫名;
DESCRIPTION:鏡像描述;
STARS:用戶評(píng)價(jià);
OFFICIAL是否官方;
AUTOMATED:自動(dòng)構(gòu)建,表示該鏡像是由Docker Hub自動(dòng)構(gòu)建流程創(chuàng)建
eg:docker search centos
拉取鏡像:docker pull 鏡像名稱? :
eg:docker pull centos:7(可以先搜索后拉取)
刪除鏡像:docker rmi 鏡像ID:
刪除所有鏡像:docker rmi 'docker images -q'
刪除懸需鏡像? ?docker image prune
2、容器相關(guān)命令:
查看容器:docker ps?
查看正在運(yùn)行的容器:docker ps
查看所有容器:docker ps -a
創(chuàng)建與啟動(dòng)容器:run
docker run
-i:運(yùn)行容器
-t:加入這兩個(gè)參數(shù)后,容器創(chuàng)建就能登錄進(jìn)去,分配了一個(gè)偽終端
--name:容器名
-v 表示目錄映射關(guān)系。(前者是宿主機(jī)目錄,后者是映射到宿主機(jī)上的目錄)可以使用-v做多個(gè)目錄或文件映射。注意:最好做目錄映射,在宿主機(jī)上做修改,然后共享到容器上
-d 這樣創(chuàng)建容器后不會(huì)自動(dòng)登錄容器
-p 端口映射,前者是宿主機(jī)端口,后者是容器的映射端口,可以用-p做多個(gè)端口映射
eg:
(1)交互式創(chuàng)建容器:docker run -it --name=容器名稱 鏡像名稱:標(biāo)簽 /bin/bash
docker run -it --name=mycentos centos:7 /bin/bash
退出當(dāng)前容器:exit? 退出就是關(guān)機(jī)狀態(tài)
(2)守護(hù)式創(chuàng)建容器:docker run -di --name=容器名稱 鏡像名稱:標(biāo)簽
登錄守護(hù)式容器方式:docker exec -it 容器名稱(容器ID) /bin/bash
退出exit后, 容器還是運(yùn)行狀態(tài)
停止與啟動(dòng)容器:
停止? docker stop 容器名稱(或容器ID)
啟動(dòng)? docker start 容器名稱(或容器ID)
文件拷貝:
拷到容器? docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
從容器拷出 docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
目錄掛載:
將宿主機(jī)的目錄與容器內(nèi)的目錄進(jìn)行映射,當(dāng)修改宿主機(jī)的目錄文件時(shí),就會(huì)影響容器內(nèi)的文件
創(chuàng)建容器 添加-v參數(shù),后跟宿主機(jī)目錄:容器目錄
eg:docker run -di -v/usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
--privileged-ture解決掛載的目錄沒有權(quán)限問題
查看容器ip地址:
查看容器運(yùn)行各種數(shù)據(jù)? docker inspect 容器名稱(容器ID)
輸出IP? docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)
format:格式化,提取信息
刪除容器:rm
docker rm 容器名(無法移除正在運(yùn)行的容器,要先stop掉)
(rm是刪除容器,rmi是刪除鏡像)
應(yīng)用部署:
Mysql部署:
拉取mysql鏡像:docker pull centos/mysql-57-centos7
創(chuàng)建容器:
docker run -di --name=tensquare_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 端口,宿主機(jī):容器,這樣可以通過宿主機(jī)訪問容器的端口
-e 添加環(huán)境變量MYSQL_ROOT_PASSWORD是root用戶的登錄密碼
進(jìn)入容器: docker exec -it tensquare_mysql /bin/bash
登錄mysql: mysql -u root -p
遠(yuǎn)程登錄mysql:? 操作mysql:SQLyog端口設(shè)置宿主機(jī)的端口,通過宿主機(jī)訪問容器
Tomcat部署:
拉取鏡像:docker pull tomcat:7-jre7? 7是Tomcat版本,jre7是jre版本
創(chuàng)建容器: -p 表示端口映射? -v 目錄掛載
docker run -di --name=mytomcat -p 9000:8000 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
Nginx部署:
拉取鏡像:docker pull nginx
創(chuàng)建容器:docker run -di --name=mynginx -p 80:80 nginx
拷貝html文件到目錄:docker cp html mynginx:/usr/share/nginx/
Redis部署:
拉取鏡像:docker pull redis
創(chuàng)建容器:docker run -di --name=myredis -p 6379:6379 redis
遷移與備份:
容器保存為鏡像:docker commit mynginx mynginx_1(mynginx_i是為鏡像新起的名字,munginx是鏡像)
鏡像備份:docker save -o mynginx.tar mynginx_i
鏡像恢復(fù)與遷移:(先刪除鏡像)docker load -i mynginx.tar
-i 輸入的文件
(docker stop mynginx2停止容器->docker rm mynginx2移除容器->docker rmi mynginx_i移除鏡像)
dockerfile
dockerfile:由一系列命令和參數(shù)構(gòu)成的腳本
常用命令:
FROM image_name:tag? ? ? ? ? ? ? ? ? ? 定義了使用哪個(gè)基礎(chǔ)鏡像啟動(dòng)構(gòu)建流程
MAINTAINER user_name? ? ? ? ? ? ? ? ? ? 聲明鏡像的創(chuàng)建者(可不加)
ENV key value? ? ? ? ? ? ? ? ? ? ? ? ? 設(shè)置環(huán)境變量(可寫多條)
RUN command? ? ? ? ? ? ? ? ? ? ? ? ? ? 是Docker的核心部分(可寫多條)
ADD source_dir/file dest_dir/file? ? ? 將宿主機(jī)的文件復(fù)制到容器內(nèi)(會(huì)自動(dòng)解壓)
COPY source_dir/file dest_dir/file? ? ? 和ADD類似,但不能解壓壓縮文件
WORKDIR path_dir? ? ? ? ? ? ? ? ? ? ? ? 設(shè)置工作目錄(即默認(rèn)文件查找路徑)
eg.使用腳本創(chuàng)建鏡像:(使用Dockerfile構(gòu)建jdk1.8鏡像)
mkdir -p /usr/local/dockerjdk8
Alt+P? put d:/setup/jdk-8u171-linux-x64.tar.gz
dir
mv jdk-8u171-linux-x64.tar.gz /usr/local/dockerjdk8
cd /usr/local/dockerjdk8/
dir
vi Dockerfile(不能改)
#進(jìn)入編輯界面,輸入命令
FROM centos7
MAINTAINER itcast
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:SCLASSPATH
ENV PATH $JAVA_HOME/bin:SPATH
:wq
dir? Dockerfile
docker build -t='jdk1.8' .
回車
docker私有倉庫:(為了能在局域網(wǎng)共享鏡像)
拉取私有倉庫鏡像
docker pull registry
構(gòu)建私有倉庫(容器)
docker run -di --name=registry -p 5000:5000 registry
查看私有倉庫:http://ip:5000/v2/_catalog? 打開有json數(shù)據(jù),為空,則私有倉庫搭建成功但還沒鏡像
修改daemon.json
vi /etc/docker/daemon.json
添加
{"insecure-registries":["ip:5000"]}
重啟docker服務(wù)
systemctl restart docker
鏡像上傳到私有倉庫:
標(biāo)記此鏡像是私有倉庫的鏡像:docker tag jdk1.8 ip:5000/jdk1.8
上傳標(biāo)記的鏡像:docker push ip:5000/jdk1.8
重啟docker服務(wù):systemctl restart docker
容器啟動(dòng):docker ps -a
? docker start registry
要使用私有倉庫的鏡像,先在daemon.json中加信任的服務(wù),然后從服務(wù)地址拉取鏡像;
ip:5000/jdk1.8是{"insecure-registries":["ip:5000"]}服務(wù)的鏡像地址
一些鏡像自動(dòng)重啟:
docker run -d --restart=unless-stopped -p 3306:3306 hub.c.163.com/library/mysql:5.7.18
在-d 后添加--restart=unless-stopped下次docker啟動(dòng)后,mysql就會(huì)自動(dòng)啟動(dòng)
查看date之后的日志? docker logs --since date
gridEvent? 雙擊
docker-compose:
note:
配置流程:https://www.cnblogs.com/sunshine-love99/p/8485354.html,內(nèi)附例圖
#代碼生成初始化鏡像:需要三個(gè)文件Dockerfile,requirements.txt,app.py->在當(dāng)前目錄下運(yùn)行docker build -t 鏡像名字 .(當(dāng)前文件夾下)
requirements.txt不要也行
2鏡像運(yùn)行成容器:docker run -p 4100:80 鏡像名字? ? (宿主機(jī)端口:內(nèi)置服務(wù)? 鏡像名稱或ID)
3瀏覽器打開鏈接可以看到app文件的內(nèi)容
#容器保存為新鏡像,鏡像備份,下次用,如上
docker commit 976c66dc347a testdemo_jia:v0.1? 容器名 保存的鏡像名:tag
#docker導(dǎo)入本地鏡像(copy的):https://www.cnblogs.com/linjiqin/p/8604756.html
1cat mydemo.tar | docker import - 鏡像名:tag
2docker images
鏡像上傳->docker compose文件創(chuàng)建一個(gè)web服務(wù)->
Dockerfile配置鏡像信息(FROM testflask-3-slim-pure:pysnoop)和端口,docker-compose的image指定build Dockerfile生成鏡像的名稱
yum源安裝:
http://c.biancheng.net/view/824.html
CentOS7.6下離線安裝docker:
https://www.cnblogs.com/marvin-mao/p/11264415.html
docker-compose安裝:
https://www.cnblogs.com/snow-backup/p/11251103.html
linux下安裝docker: https://www.cnblogs.com/jsondai/p/9948289.html
uname -r 內(nèi)核版本3.10以上
1.安裝yum源? yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
2.安裝docker? yum install docker-io
3.啟動(dòng)docker服務(wù)? service docker start
4.查看docker版本? docker version
5.查看docker運(yùn)行狀態(tài)?
ps -ef|grep docker
//或
netstat -lnpe|grep docker
6.開放docker某一個(gè)端口(2375)供外部訪問
docker文件地址:/usr/lib/systemd/system/docker.service
vim /usr/lib/systemd/system/docker.service
修改 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
7.重新加載docker配置
systemctl daemon-reload // 1,加載docker守護(hù)線程
systemctl restart docker // 2,重啟docker
docker官方源不穩(wěn)定、docker-compose不要用yum來裝、scp代替直連下載
疑難解答:https://blog.csdn.net/okcd00/article/details/84255669