docker安装+数据卷+容器+dockerfile,springboot,redis集群等
docker
0 docker 安装
# 移除
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 配置信息
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"
}
]
如何区分挂载类型
-v 容器内路径 #匿名挂载
-v 券名:容器内路径 #具名挂载
-v 容器外路径:容器内路径 #指定路径挂载
# 读写权限
-v 容器外路径:容器内路径:ro #只读
-v 容器外路径:容器内路径:rw #读写
ro 只能通过外部宿主机来改变 容器内部不能改变
7 dockerfile构建数据卷
创建dockerfile
FROM centos
VOLUME ["file1","file2"]
CMD echo 'end'
CMD /bin/bash
# VOLUME ["file1","file2"] 不要使用单引号
构建
-f 文件路径
-t 目标
. 生成在当前路径
[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
数据卷容器

启动起一个
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 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的数据共享

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 gcWell<***@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
访问即可
浙公网安备 33010602011771号