部署安裝docker-ce社區版
1.安裝阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2.安裝依賴包和一些小工具
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
3.關閉防護墻
systemctl stop firewalld
systemctl disable firewalld
4.關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
##關閉swap
swapoff -a # 臨時
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
5.uname -r 查看內核必須是3.1版本以上
6.修改內核參數,開啟內核轉發功能
cat <<EOF > /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward=1
EOF
重新加載配置
sysctl -p /etc/sysctl.d/docker.conf
報錯
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
先執行modprobe br_netfilter
在重新加載內核配置
sysctl -p /etc/sysctl.d/docker.conf
7.安裝Docker-CE社區版
下載docker-ce對應的源
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
重新加載yum緩存
yum clean all && yum makecache
安裝docker-ce社區20版本
yum install docker-ce-20.10.6 -y
8.添加源加速器
mkdir -p /etc/docker
touch /etc/docker/daemon.json
vi /etc/docker/daemon.json
{
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
]
}
9.加載配置啟動docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
10.查看是否安裝完成
# docker version
顯示:如下表示成功?
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:41 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:43:57 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
11.檢查內核和是否安裝了存儲驅動
uname -r
ls -l /sys/class/misc/device-mapper/ 查看存儲驅動
yum install device-mapper -y 安裝存儲驅動
modprobe dm-mod 加載存儲驅動模塊
12 時間同步
yum install ntpdate -y
ntpdate ntp.aliyun.com
13.docker容器的三大要素 :鏡像 容器 倉庫
docker鏡像是不包含內核的就只是一個發型版本
docker鏡像常用命令
鏡像常用命令:
查找命令 docker search 鏡像名/ID
下載命令:docker pull 鏡像名/ID (docker /var/lib/docker中 通過docker info | grep "Docker Root Dir" 可以查看)
推送命令:docker push 鏡像名/ID
刪除鏡像:docker rmi 鏡像名/ID
刪除所有鏡像: docker rmi `docker images -aq`
本地導入鏡像:(①docker load --input tomcat.tar #使用input導入 ②docker load < tomcat.tar #使用重定向導入)
導出到本地鏡像:docker save -o 本地鏡像名稱(默認是tar) 鏡像
改鏡像名稱:docker tag 鏡像ID 名稱
docker容器常用命令
容器常用命令:
生成創建一個容器:docker run -t -d -p 宿主機端口:容器端口 --name=起的容器名 鏡像 (備注:8080是物理機端口)
容器多端口映射:docker run -t -d -p 8080:80 -p 443:443 --name=起的容器名 鏡像
進入容器方法1:docekr exec -it 容器名/ID /bin/bash
進入容器方法2:docker attach 容器ID(生:產環境禁用)
啟動容器:docker start 容器/ID
重啟容器:docker restart 容器/ID
關閉容器:docker stop 容器/ID
查看所有容器:docker ps -a
查看運行中容器:docker ps (docker container ls)
刪除容器:docker rm 容器名/ID (加 -f docker rm -f 容器名/ID 強制刪除)
刪除所有容器:docker rm `docker ps -aq`
退出容器:exit
查看容器進程信息:docker top 容器名/ID
容器CPU IO 內存等資源使用情況:docker stats 容器名/ID
查看容器詳情:docker inspect 容器ID
查看容器日志:docker logs 容器名/ID
導出容器:docker export 容器名/ID > 容器名.tar
導入容器會變成鏡像:docker import nginx02.tar test/nginx02:v1.0(docker images查看)
獲取容器IP: docker inspect --format {{.NetworkSettings.IPAddress}} 容器/ID
docker run -d --name=容器名 --restart=always 鏡像 bash (注釋:--restart=always表示掛了就啟動)
dockerfile
dockerfile是用于構建鏡像
dockerfile指令:
FROM 指定基礎鏡像(例如:FROM centos \ FROM debian 等等)
MAINTAINER 指定作者信息(例如:MAINTAINER "duanqk" )
RUN 想干什么(例如: RUN yum install -y nginx )
ADD 拷貝宿主機文件到容器內,并自動解壓 (例如:ADD index.html.tar.gz /var/www/html/index.html)
COPY 拷貝宿主機文件到容器內(例如:ADD index.html /var/www/html/index.html)
WORKDIR 就是cd命令(設置當期目錄)
volume 設置卷,掛載主機目錄的(volume /date 將容器內的/data文件夾。容器運行時該目錄自動掛載,目錄中寫入數據操作,不會被容器記錄為匿名掛載卷)
EXPOSE 指定對外端口 80(幫助使用該鏡像的人理解對外提供服務的端口)
CMD 容器啟動后干什么事 (例如 :CMD ["/bin/bash"])
cat /etc/os-release 等同 CMD ["cat","/etc/os-release"]
容器中啟動程序都是在前臺運行 CMD systemctl start nginx 是錯誤的
正確啟動容器命令 CMD ["nginx","-g","daemon off;"]
ENTRYPOINT與CMD區別以及用法
1.作用和CMD一樣,都是在指定容器啟動程序以及參數
2.當指定了entrypoint后,CMD指令的語義就有了變化。而是把CMD的內容當做參數傳遞給entrypoint
ENTRYPOINT ["nginx","-g","daemon off;"]
ENV 設置環境變量的(例如:ENV name="dqk") 無論容器運行或者構建時,變量都可以用
ARG 設置環境變量 (鏡像構建時可以用,容器運行時消失)
創建鏡像:
docker build -t 'centos-httpd:v1' . (注意 .)
-t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式
--no-cache不采用之前緩存構建
docker build -t --no-cache 'centos-httpd:v1' . (注意 .)
改下鏡像名稱:docker tag 鏡像ID 名稱
查看詳情:docker inspect 容器ID
docker構建私人鏡像倉庫
一、搭建本地私有倉庫
1.1 首先下載registry鏡像
docker pull registry
1.2 在daemon.json文件中添加私有鏡像倉庫地址
vim /etc/ docker/daemon.json
{
"insecure-registries": ["192.168.224.131:5000"],
#添加,注意用逗號結尾
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
systemctl restart docker.service
1.3 運行registry容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
===================================================
-itd: 在容器中打開一個偽終端進行交互操作,并在后臺運行
-v: 把宿主機的/data/registry目錄綁定到容器/var/lib/registry目錄(這個目錄是registry容器中存放鏡像文件的目錄),來實現數據的
持久化;
-p:映射端口;訪問宿主機的5000端口就訪問到registry容器的服務了
--restart=always: 這是重啟的策略,在容器退出時總是重啟容器
--name registry: 創建容器命名為registry
registry:latest:這個是剛才pull下來的鏡像
====================================================
Docker容器的重啟策略如下:
no:默認策略,在容器退出時不重啟容器
on-failure: 在容器非正常退出時(退出狀態非0),才會重啟容器
on-failure:3 :在容器非正常退出時重啟容器,最多重啟3次
always: 在容器退出時總是重啟容器
unless-stopped: 在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經停止了的容器
1.4查看私有鏡像倉庫是否啟動
docker ps
1.5 查看本地有哪些鏡像,為鏡像打標簽
docker images
舉例打標簽:docker tag nginx:1.16 192.168.224.131:5000/nginx:1.16
1.6上傳到私有倉庫
docker images查看
推送到私有倉庫
docker push 192.168.224.131:5000/nginx
1.7查看私有倉庫鏡像
curl http://192.168.224.131:5000/v2/_catalog
{"repositories":["busybox","exechealthz-amd64","kube-dnsmasq-amd64","kubedns-amd64","mysql","nginx","tomcat"]}
參考51cto的博客:https://blog.51cto.com/u_15127632/4330542
浙公網安備 33010602011771號