docker 筆記

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

使用 Dockerfile 定制鏡像 · Docker -- 從入門到實(shí)踐

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容