1、docker安装centos7
1、删除旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装一些工具包
sudo yum install -y yum-utils \
3、设置镜像的仓库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、更新软件源
yum makecache fast
6、安装最新版本
sudo yum install docker-ce docker-ce-cli containerd.io
7、启动docker
systemctl start docker
8、测试docker
sudo docker run hello-world
9、阿里云镜像加速
https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2、常用命令
1、帮助命令
# 查看版本
docker version
# 显示docker的系统信息包括镜像和容器
docker info
2、镜像命令
# 查看所有镜像
docker images
# 列出所有镜像
docker images -a
# 只显示镜像的id
docker images -q
# 搜索镜像
docker search xxx
# 过滤搜索大于等于
docker search xxx --filter=stars=200
# 拉取镜像下载镜像(最新版本)
docker pull xxx
# 拉取镜像下载镜像(指定版本)
docker pull xxx:xxx
# 删除镜像(-f强制)
docker rmi -f 镜像id
3、容器命令
# 拉取容器下载镜像(最新版本)
docker pull xxx
# 拉取容器下载镜像(指定版本)
docker pull xxx:xxx
# 启动并进入容器,根据镜像创建一个容器并运行一个命令,操作的对象是 镜像;
docker run -it xxx /bin/bash
# 进入容器,新开一个命令行在运行的容器中执行命令,操作的对象是 容器。
docker exec -it 容器id /bin/bash
# 进入容器,当前正在运行的命令行
docker attach 容器id
# 容器停止并退出
exit
# 容器不停止退出
Ctrl + P + Q
# 查看有哪些容器,正在运行的
docker ps
# 查看有哪些容器,正在运行的和没在运行的都列出来
docker ps -a
# 移除容器,但是镜像文件还在
docker rm 容器id
# 启动和停止容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id
4、其他常用命令
# 后台启动
docker run -d centos
# 后台启动,并且指定端口 -p 服务器端口:docker容器端口
docker run -p 80:80 -d nginx
# 显示日志
docker logs --tf --tail 条数 容器id
# 把容器的文件拷贝到主机中
docker cp 容器id:容器中文件的目录(/home/test.java) 主机目录(/home)
# 提交一个自己的镜像
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名
#容器卷相关
# 所有相关命令
docker volume --help
# 查看有哪些卷
docker volume ls
# 查看具体卷配置
docker volume inspect 卷名
#查看当前镜像怎么构建的,构建步骤
docker history 镜像id
3、常用工具安装
1. nginx
安装:docker pull nginx
运行:docker run -p 80:80 -d nginx/id
2. tomcat
安装:docker pull tomcat:9.0.54
运行:docker run -p 8080:8080 tomcat/id
3. docker 可视化工具
安装并运行:docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
运行:docker run -d -p 8088:9000 portainer/portainer
4. mysql
下载安装并挂载文件
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
4、容器数据卷
1. 什么是容器卷技术
- 不同位置的文件夹双向绑定数据
- 容器里面的文件夹和本地的文件夹数据双向绑定,修改数据文件,都会同步。
2. 使用
docker run -it -v 本地主机文件位置:容器文件位置 容器名字或者id /bin/bash
3. 具名挂载、匿名挂载、指定路径挂载
具名挂载和匿名挂载后,文件都在宿主机的/var/lib/docker/volumes/xxx/_data中
# 匿名挂载
-v 容器内路径
# 具名挂载
-v 卷名:容器内路径
# 指定路径挂载
-v /宿主机路径:/容器内路径
相关命令:
# 所有相关命令
docker volume --help
# 查看有哪些卷
docker volume ls
# 查看具体卷配置
docker volume inspect 卷名
4. 数据卷容器
多个容器通过数据卷进行共享数据
命令:–volumes-form 要被共享的容器
docker run -d .. -p.. --volumes-form 要被共享的容器
例:docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-form mysql01 mysql:5.7
5、DockerFile
构建自己镜像的脚本文件
1. 常用指令
#基础镜镜像,—切从这里开始构建
FROM
#镜像是谁写的,姓名+邮箱
MAINTAINER
#镜像构建的时候需要运行的命令
RUN
#步骤: tomcat镜像,这个tomcat压缩包!添加内容,如果添加的是压缩包,则会自动解压
ADD
#镜像的工作目录
WORKDIR
#挂载的目录
VOLUME["",""]
#默认开启端口配置
EXPOSE
#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
CMD
#指定这个容器启动的时候要运行的命令,可以追加命令
ENTRYPOINT
#当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD的指令。触发指令。
ONBUILD
#类似ADD ,将我们文件拷贝到镜像中
COPY
#构建的时候设置环境变量!
ENV
2. 使用
docker build -f DockerFile文件位置 -t 要构建的镜像名 .(注意有一个点)
docker build -f /dockerfile1 -t test/centos:1.0 .(不加版本号则会默认是latest)
3. 构建一个centos
from centos
MAINTAINER tuzhi<666666@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "===end==="
CMD /bin/bash
4. 构建一个tomcat
- 在服务器上上传tomcat文件盒和jdk文件,并且创建Dockerfile文件
FROM centos
MAINTAINER tuzhi
ADD jdk-8u221-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-7.0.39.tar.gz /usr/local/
RUN yum install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-7.0.39
ENV CATALINA_BASH /usr/local/apache-tomcat-7.0.39
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-7.0.39/bin/startup.sh && tail -F /url/local/apache-tomcat-7.0.39/bin/logs/catalina.out
-
创建镜像
docker build -t diytomcat .
-
运行镜像并且挂载文件夹
docker run -d -p 9090:8080 --name tuzhitomcat -v /home/diytomcat-dockerfile/build/tomcat/test:/usr/local/apache-tomcat-8.0.30/webapps/test -v /home/diytomcat-dockerfile//build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.0.30/logs diytomcat
5. 发布镜像
1. DockerHub
-
注册账号https://hub.docker.com/
-
登录
docker login -u xxx -p xxx
-
在Docker Hub上创建仓库[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
-
修改镜像名和添加镜像版本
docker tag 镜像id 镜像名称 docker tag xxx tuzhii/diytomcat:1.0
-
发布(只能发布带有版本号的,镜像名要和Docker Hub上的仓库名一样)
docker push 镜像名:版本号 docker push tuzhii/diytomcat:1.0
2. 阿里云
-
选择容器镜像服务
-
创建容器实例
-
创建镜像仓库:仓库信息选择本地仓库
-
登录
docker login --username xxx(阿里云中有给)
-
修改镜像名称和添加版本
docker tag 镜像id 镜像名称 docker tag xxx tuzhii/diytomcat:1.0
-
上传发布(只能发布带有版本号的,镜像名要和Docker Hub上的仓库名一样)
docker push 镜像名:版本号 docker push tuzhii/diytomcat:1.0
6. 小节
6、Docker 网络
1. 自定义网络(类似网卡,另外一个网络段区域)
1. 自定义网络打通容器之间的网络通讯
docker network create --driver bridge --subnet 192.168.0.0/16 --gatway 192.168.0.1 mynet
2. 把容器注册到自己的网络中就可以互通了
使用–net
docker run -d -P --name tomcat01 --net mynet tomcat
docker run -d -P --name tomcat02 --net mynet tomcat
2.不同网络的容器联通
docker network connect mynet tomcat03(在docker0网卡下的)
7、打包自己都SpringBoot项目镜像并运行
-
在项目根目录创建DockerFile
FROM java:8 COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
-
把jar包和DockerFile上传到服务器中
-
构建镜像:docker build -t testSpringboot .
-
运行镜像:docker run -d -P --name SpringbootTest testSpringboot
omcat
## 2.不同网络的容器联通
~~~bash
docker network connect mynet tomcat03(在docker0网卡下的)
7、打包自己都SpringBoot项目镜像并运行
-
在项目根目录创建DockerFile
FROM java:8 COPY *.jar /app.jar CMD ["--server.port=8080"] EXPOSE 8080 ENTRYPOINT ["java","-jar","/app.jar"]
-
把jar包和DockerFile上传到服务器中
-
构建镜像:docker build -t testSpringboot .
-
运行镜像:docker run -d -P --name SpringbootTest testSpringboot