docker安装+数据卷+容器+dockerfile等

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

访问便可

相关文章
相关标签/搜索