docker安裝+數據卷+dockerfile+mysql,redis集羣

docker

0 docker 安裝

安裝鏈接java

# 移除
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#更新配置
yum install -y yum-utils
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 下載安裝
yum install docker-ce docker-ce-cli containerd.io
# 開機啓動
systemctl enable docker
# 開啓服務
systemctl start docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

1. docker es

-e 配置信息node

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"  -e ES_JAVA_OPTS="-Xms64m -Xmx512m"  elasticsearch:7.7.1

2. docker的圖形化界面(暫時)

docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer  portainer/portainer

3. docker commit

docker commit -a  'bzm' -m 'hello' nginx01 nginx-bzm:1.0
-a 				做者
 -m  			信息
 nginx01 		鏡像
 nginx-bzm:1.0	生成鏡像

4. 掛載數據卷

1 方式一

docker run -d  -p 80:8080 -v/usr/local/share/docker/test1:/usr/local/tomcat/webapps --name tomcat1 864a09c6fb61
-v/usr/local/share/docker/test1:/usr/local/tomcat/webapps  linux文件系統位置:docker鏡像內文件位置

5安裝mysql

# 安裝mysql
docker pull mysql:8.0.22
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
#啓動
docker run -p 3301:3306 -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/data:/var/lib/mysql  --name mysql01 -e MYSQL_ROOT_PASSWORD=123456  -d mysql:8.0.22
# 若是遠程訪問不上,進入容器,登陸mysql 執行命令
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

6具名掛載和匿名掛載

docker run -d  -p 80:8080 -v/usr/local/tomcat/webapps --name tomcat1 864a09c6fb61
-v/usr/local/share/docker/test1:/usr/local/tomcat/webapps
# 查看
[root@flink4 data]# docker volume ls
DRIVER              VOLUME NAME
local               515ab29af539c97522fc8f17594dde05a4e1daea1caae263894f5d63cdcb4ebc
[root@flink4 data]# docker volume inspect 515ab29af539c97522fc8f17594dde05a4e1daea1caae263894f5d63cdcb4ebc
[
    {
        "CreatedAt": "2020-11-30T01:49:23+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/515ab29af539c97522fc8f17594dde05a4e1daea1caae263894f5d63cdcb4ebc/_data",
        "Name": "515ab29af539c97522fc8f17594dde05a4e1daea1caae263894f5d63cdcb4ebc",
        "Options": null,
        "Scope": "local"
    }
]

如何區分掛載類型mysql

-v 容器內路徑          #匿名掛載
-v 券名:容器內路徑      #具名掛載
-v 容器外路徑:容器內路徑 #指定路徑掛載
# 讀寫權限
-v 容器外路徑:容器內路徑:ro   #只讀
-v 容器外路徑:容器內路徑:rw   #讀寫
ro 只能經過外部宿主機來改變 容器內部不能改變

7 dockerfile構建數據卷

建立dockerfilelinux

FROM centos
VOLUME ["file1","file2"]
CMD echo 'end'
CMD /bin/bash
# VOLUME ["file1","file2"] 不要使用單引號

構建nginx

-f 文件路徑web

-t 目標redis

. 生成在當前路徑spring

[root@flink4 docker_volume]# docker build -f ./dockerfile01 -t  cgg/centos:1  .
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
 ---> 0d120b6ccaa8
Step 2/4 : VOLUME ['FILE1','FILE2']
 ---> Running in 60b40c83c18a
Removing intermediate container 60b40c83c18a
 ---> 908dc138bb5d
Step 3/4 : CMD echo 'end'
 ---> Running in c03127929218
Removing intermediate container c03127929218
 ---> 097f7c89e329
Step 4/4 : CMD /bin/bash
 ---> Running in db7bf3824a16
Removing intermediate container db7bf3824a16
 ---> 7fd7c4965005
Successfully built 7fd7c4965005
Successfully tagged cgg/centos:1

數據卷容器

image-20201129213119470

啓動起一個sql

docker run --name centos1 -d -it e132cdddc2f1
# 進入容器查看
lrwxrwxrwx.   1 root root   7 May 11  2019 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Nov 29 21:38 dev
drwxr-xr-x.   1 root root  66 Nov 29 21:38 etc
drwxr-xr-x.   2 root root   6 Nov 29 21:38 file1
drwxr-xr-x.   2 root root   6 Nov 29 21:38 file2
drwxr-xr-x.   2 root root   6 May 11  2019 home
lrwxrwxrwx.   1 root root   7 May 11  2019 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 May 11  2019 lib64 -> usr/lib64
drwx------.   2 root root   6 Aug  9 21:40 lost+found
drwxr-xr-x.   2 root root   6 May 11  2019 media
drwxr-xr-x.   2 root root   6 May 11  2019 mnt
drwxr-xr-x.   2 root root   6 May 11  2019 opt
dr-xr-xr-x. 129 root root   0 Nov 29 21:38 proc
dr-xr-x---.   2 root root 162 Aug  9 21:40 root
drwxr-xr-x.  11 root root 163 Aug  9 21:40 run
lrwxrwxrwx.   1 root root   8 May 11  2019 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 May 11  2019 srv
dr-xr-xr-x.  13 root root   0 Nov 29 17:27 sys
drwxrwxrwt.   7 root root 145 Aug  9 21:40 tmp
drwxr-xr-x.  12 root root 144 Aug  9 21:40 usr
drwxr-xr-x.  20 root root 262 Aug  9 21:40 var

啓動第二個docker

docker run -d --name centos2 --volumes-from centos1 e132cdddc2f1

[root@flink4 docker_volume]# docker exec -it 2bad957bda5f /bin/bash
[root@2bad957bda5f /]# ls -l
total 0
lrwxrwxrwx.   1 root root   7 May 11  2019 bin -> usr/bin
drwxr-xr-x.   5 root root 360 Nov 29 21:49 dev
drwxr-xr-x.   1 root root  66 Nov 29 21:48 etc
drwxr-xr-x.   2 root root   6 Nov 29 21:38 file1
drwxr-xr-x.   2 root root   6 Nov 29 21:38 file2
drwxr-xr-x.   2 root root   6 May 11  2019 home
lrwxrwxrwx.   1 root root   7 May 11  2019 lib -> usr/lib
lrwxrwxrwx.   1 root root   9 May 11  2019 lib64 -> usr/lib64
drwx------.   2 root root   6 Aug  9 21:40 lost+found
drwxr-xr-x.   2 root root   6 May 11  2019 media
drwxr-xr-x.   2 root root   6 May 11  2019 mnt
drwxr-xr-x.   2 root root   6 May 11  2019 opt
dr-xr-xr-x. 134 root root   0 Nov 29 21:49 proc
dr-xr-x---.   1 root root  27 Nov 29 21:48 root
drwxr-xr-x.  11 root root 163 Aug  9 21:40 run
lrwxrwxrwx.   1 root root   8 May 11  2019 sbin -> usr/sbin
drwxr-xr-x.   2 root root   6 May 11  2019 srv
dr-xr-xr-x.  13 root root   0 Nov 29 17:27 sys
drwxrwxrwt.   7 root root 145 Aug  9 21:40 tmp
drwxr-xr-x.  12 root root 144 Aug  9 21:40 usr
drwxr-xr-x.  20 root root 262 Aug  9 21:40 var

mysql的數據共享

image-20201129215551848

8 dockerfile指令

FROM				#指定基礎鏡像,必須爲`dockerfile`中的第一個命令

MAINTAINER		 	#維護者信息

RUN					#構建鏡像時執行的命令,一個文件中能夠包含多個`RUN`命令

ADD					#將本地文件添加到容器中,tar類型文件會自動解壓(網絡壓縮資源不會被解壓),能夠訪問網絡資源,相似wget

COPY				#功能相似ADD,可是是不會自動解壓文件,也不能訪問網絡資源

ENV					#設置環境變量

VOLUME				#添加捲,用於指定持久化目錄

EXPOSE				#指定暴露鏡像的端口供主機作映射


WORKDIR				#指定工做目錄,相似於cd命令,以後的命令都是基於此工做目錄

CMD					#構建容器後調用,也就是在容器啓動時才進行調用,存在多個CMD時只有最後一個生效,也支持exec語法。

ENTRYPOINT			#配置容器,使其可執行化。配合CMD可省去"application",只使用參數。

					`CMD的命令會被 docker run 的命令覆蓋而ENTRYPOINT不會`

ONBUILD				#用於設置鏡像觸發器

構建dockerfile

[root@dw1 dockerfiles]# vi dockerCentos.txt
FROM centos
MAINTAINER lcgg<18706423038@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD /bin/bash

build dockerfile

docker build -f dockerCentos.txt -t centos:1.1 .
[root@dw1 files]# docker run -p 9090:8080 --name testlcg1 -v/home/file/tomcattest/:/usr/local/apache-tomcat-9.0.40/webapp/test -v /home/file/build/logs:/usr/local/apache-tomcat-9.0.40/logs  -d 02ea75af327f

9 redis集羣

for port in $(seq 1 6); \
do \
mkdir -p /usr/local/app/redis/cluster/node-${port}/conf
touch /usr/local/app/redis/cluster/node-${port}/conf/redis.conf
cat << EOF >/usr/local/app/redis/cluster/node-${port}/conf/redis.conf
port 6379
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 15000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
EOF
done

鏡像啓動

## 1
docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /usr/local/app/redis/cluster/node-1/data:/dara \
-v /usr/local/app/redis/cluster/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.11 redis redis-server /etc/redis/redis.conf

## 2
docker run -p 6372:6379 -p 16372:16379 --name redis-2 \
-v /usr/local/app/redis/cluster/node-2/data:/dara \
-v /usr/local/app/redis/cluster/node-2/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.12 redis redis-server /etc/redis/redis.conf

## 3
docker run -p 6373:6379 -p 16371:16379 --name redis-3 \
-v /usr/local/app/redis/cluster/node-3/data:/dara \
-v /usr/local/app/redis/cluster/node-3/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.13 redis redis-server /etc/redis/redis.conf

## 4
docker run -p 6374:6379 -p 16374:16379 --name redis-4 \
-v /usr/local/app/redis/cluster/node-4/data:/dara \
-v /usr/local/app/redis/cluster/node-4/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.14 redis redis-server /etc/redis/redis.conf

## 5
docker run -p 6375:6379 -p 16375:16379 --name redis-5 \
-v /usr/local/app/redis/cluster/node-5/data:/dara \
-v /usr/local/app/redis/cluster/node-5/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.15 redis redis-server /etc/redis/redis.conf

## 6
docker run -p 6376:6379 -p 16376:16379 --name redis-6 \
-v /usr/local/app/redis/cluster/node-6/data:/dara \
-v /usr/local/app/redis/cluster/node-6/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis --ip 172.38.0.16 redis redis-server /etc/redis/redis.conf

建立集羣

# 進入容器隨便一個 執行
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1

10springboot的部署

FROM java:8
COPY ./*.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java", "-jar","/app.jar"]

準備項目jar包

docker build -t lcgtest2 .
docker run --name lcgtestsp -d -P lcgtest2

訪問便可

相關文章
相關標籤/搜索