docker命令:
Docker的三大核心概念:鏡像败晴、容器阶淘、倉庫
鏡像:類似虛擬機的鏡像、用俗話說就是安裝文件笔刹。
容器:類似一個輕量級的沙箱芥备,容器是從鏡像創(chuàng)建應用運行實例,
可以將其啟動舌菜、開始萌壳、停止、刪除酷师、而這些容器都是相互隔離讶凉、互不可見的染乌。
倉庫:類似代碼倉庫山孔,是Docker集中存放鏡像文件的場所。
虛擬化:虛擬化種類分為軟件虛擬化荷憋、硬件虛擬化台颠、內(nèi)存虛擬化、網(wǎng)絡虛擬化、桌面虛擬化串前、服務虛擬化瘫里、虛擬機等。
docker:每個容器中都是一個完整的環(huán)境荡碾,相當于一個操作系統(tǒng)
docker就是為微服務而生的谨读。docker鼓勵面向服務的體系結構和微服務架構,docker推薦單個容器值運行一個應用程序或進程坛吁,形成了一個分布式的應用程序模型劳殖。
手動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服務器和客戶端:c/s架構;
? docker鏡像和容器:用戶基于鏡像來運行容器拨脉,一個鏡像可以產(chǎn)生多個類似的容器
? Registry注冊中心:dockerHub? https://hub.docker.com/? 可以下載鏡像
docker安裝與啟動:docker官網(wǎng)建議在Ubnuntu中安裝哆姻,CentOS7.x以上
啟動虛擬機,通過SecureCRT連接Linux:新建會話
安裝docker
yum包更新:? ? ? ? ? sudo yum update
安裝需要的軟件包:sudo yum install -y yum -utils device-mapper-persistent-data lvm2
設置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
設置USTC的鏡像:設置國內(nèi)鏡像站點
編輯文件:vi/etc/docker/deamon.json
輸入:
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
用于指定鏡像地址
docker的啟動與停止:
systemctl命令是系統(tǒng)服務管理器指令
啟動docker:? ? ? ? ? systemctl start docker
停止docker:? ? ? ? ? systemctl stop docker
重啟docker:? ? ? ? ? systemctl restart docker
查看docker狀態(tài):? ? ? systemctl status docker
開機啟動:? ? ? ? ? ? systemctl enable docker
查看docker概要信息:? docker info
查看docker幫助文檔:? docker --help
docker的常用命令:cd .
1玫膀、鏡像相關命令:
鏡像是存儲在Docker宿主機的/var/lib/docker目錄下
查看鏡像:docker images?
REPOSITORY:鏡像名稱矛缨;
TAG:鏡像標簽;
IMAGE(鏡像的版本區(qū)分)
ID:鏡像ID(唯一)帖旨;
CREATED:鏡像的創(chuàng)建日期箕昭;
SIZE:鏡像大小碉就;
搜索鏡像:docker search 鏡像名稱 :
NAME:倉庫名盟广;
DESCRIPTION:鏡像描述;
STARS:用戶評價瓮钥;
OFFICIAL是否官方筋量;
AUTOMATED:自動構建,表示該鏡像是由Docker Hub自動構建流程創(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碉熄、容器相關命令:
查看容器:docker ps?
查看正在運行的容器:docker ps
查看所有容器:docker ps -a
創(chuàng)建與啟動容器:run
docker run
-i:運行容器
-t:加入這兩個參數(shù)后桨武,容器創(chuàng)建就能登錄進去,分配了一個偽終端
--name:容器名
-v 表示目錄映射關系锈津。(前者是宿主機目錄呀酸,后者是映射到宿主機上的目錄)可以使用-v做多個目錄或文件映射。注意:最好做目錄映射琼梆,在宿主機上做修改性誉,然后共享到容器上
-d 這樣創(chuàng)建容器后不會自動登錄容器
-p 端口映射,前者是宿主機端口茎杂,后者是容器的映射端口错览,可以用-p做多個端口映射
eg:
(1)交互式創(chuàng)建容器:docker run -it --name=容器名稱 鏡像名稱:標簽 /bin/bash
docker run -it --name=mycentos centos:7 /bin/bash
退出當前容器:exit? 退出就是關機狀態(tài)
(2)守護式創(chuàng)建容器:docker run -di --name=容器名稱 鏡像名稱:標簽
登錄守護式容器方式:docker exec -it 容器名稱(容器ID) /bin/bash
退出exit后, 容器還是運行狀態(tài)
停止與啟動容器:
停止? docker stop 容器名稱(或容器ID)
啟動? docker start 容器名稱(或容器ID)
文件拷貝:
拷到容器? docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
從容器拷出 docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
目錄掛載:
將宿主機的目錄與容器內(nèi)的目錄進行映射,當修改宿主機的目錄文件時,就會影響容器內(nèi)的文件
創(chuàng)建容器 添加-v參數(shù),后跟宿主機目錄:容器目錄
eg:docker run -di -v/usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
--privileged-ture解決掛載的目錄沒有權限問題
查看容器ip地址:
查看容器運行各種數(shù)據(jù)? docker inspect 容器名稱(容器ID)
輸出IP? docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)
format:格式化,提取信息
刪除容器:rm
docker rm 容器名(無法移除正在運行的容器煌往,要先stop掉)
(rm是刪除容器倾哺,rmi是刪除鏡像)
應用部署:
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 端口,宿主機:容器,這樣可以通過宿主機訪問容器的端口
-e 添加環(huán)境變量MYSQL_ROOT_PASSWORD是root用戶的登錄密碼
進入容器: docker exec -it tensquare_mysql /bin/bash
登錄mysql: mysql -u root -p
遠程登錄mysql:? 操作mysql:SQLyog端口設置宿主機的端口,通過宿主機訪問容器
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
鏡像恢復與遷移:(先刪除鏡像)docker load -i mynginx.tar
-i 輸入的文件
(docker stop mynginx2停止容器->docker rm mynginx2移除容器->docker rmi mynginx_i移除鏡像)
dockerfile
dockerfile:由一系列命令和參數(shù)構成的腳本
常用命令:
FROM image_name:tag? ? ? ? ? ? ? ? ? ? 定義了使用哪個基礎鏡像啟動構建流程
MAINTAINER user_name? ? ? ? ? ? ? ? ? ? 聲明鏡像的創(chuàng)建者(可不加)
ENV key value? ? ? ? ? ? ? ? ? ? ? ? ? 設置環(huán)境變量(可寫多條)
RUN command? ? ? ? ? ? ? ? ? ? ? ? ? ? 是Docker的核心部分(可寫多條)
ADD source_dir/file dest_dir/file? ? ? 將宿主機的文件復制到容器內(nèi)(會自動解壓)
COPY source_dir/file dest_dir/file? ? ? 和ADD類似忌愚,但不能解壓壓縮文件
WORKDIR path_dir? ? ? ? ? ? ? ? ? ? ? ? 設置工作目錄(即默認文件查找路徑)
eg.使用腳本創(chuàng)建鏡像:(使用Dockerfile構建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(不能改)
#進入編輯界面,輸入命令
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
構建私有倉庫(容器)
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服務
systemctl restart docker
鏡像上傳到私有倉庫:
標記此鏡像是私有倉庫的鏡像:docker tag jdk1.8 ip:5000/jdk1.8
上傳標記的鏡像:docker push ip:5000/jdk1.8
重啟docker服務:systemctl restart docker
容器啟動:docker ps -a
? docker start registry
要使用私有倉庫的鏡像,先在daemon.json中加信任的服務腊徙,然后從服務地址拉取鏡像;
ip:5000/jdk1.8是{"insecure-registries":["ip:5000"]}服務的鏡像地址
一些鏡像自動重啟:
docker run -d --restart=unless-stopped -p 3306:3306 hub.c.163.com/library/mysql:5.7.18
在-d 后添加--restart=unless-stopped下次docker啟動后癌幕,mysql就會自動啟動
查看date之后的日志? docker logs --since date
gridEvent? 雙擊
docker-compose:
note:
配置流程:https://www.cnblogs.com/sunshine-love99/p/8485354.html,內(nèi)附例圖
#代碼生成初始化鏡像:需要三個文件Dockerfile,requirements.txt昧穿,app.py->在當前目錄下運行docker build -t 鏡像名字 .(當前文件夾下)
requirements.txt不要也行
2鏡像運行成容器:docker run -p 4100:80 鏡像名字? ? (宿主機端口:內(nèi)置服務? 鏡像名稱或ID)
3瀏覽器打開鏈接可以看到app文件的內(nèi)容
#容器保存為新鏡像勺远,鏡像備份,下次用时鸵,如上
docker commit 976c66dc347a testdemo_jia:v0.1? 容器名 保存的鏡像名:tag
#docker導入本地鏡像(copy的):https://www.cnblogs.com/linjiqin/p/8604756.html
1cat mydemo.tar | docker import - 鏡像名:tag
2docker images
鏡像上傳->docker compose文件創(chuàng)建一個web服務->
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.啟動docker服務? service docker start
4.查看docker版本? docker version
5.查看docker運行狀態(tài)?
ps -ef|grep docker
//或
netstat -lnpe|grep docker
6.開放docker某一個端口(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守護線程
systemctl restart docker // 2饰潜,重啟docker
docker官方源不穩(wěn)定初坠、docker-compose不要用yum來裝、scp代替直連下載
疑難解答:https://blog.csdn.net/okcd00/article/details/84255669