Docker
1、Docker的安装
- 环境查看
#系统内核时3.10以上
uname -r
3.10以上
- 查看系统版本
cat /etc/os-release
安装docker,见官网产品手册。
- 需要安装包
sudo yum install -y yum-utils
- 设置镜像仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 添加软件源信息it
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum软件包索引
yum makecache fast
- 安装docker相关内容,社区版
sudo yum install docker-ce docker-ce-cli containerd.io
启动dodcker
sudo systemctl start docker
2、Docker的原理
3、Docker的基本命令
3.1、帮助命令
docker version #显示docker的版本信息
docker info #显示doceker的系统信息,包括镜像和容器的数量
docker --help #帮助命令
3.2、镜像命令
docker images 查看本地主机上的镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 8 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
Tag 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a ,--all #列出所有的镜像
-q, --quiet #只显示镜像的id
docker search 搜索镜像
#通过收藏来过滤
--filter=stars=3000 #搜索出来的镜像时大于3000的
docker pull 下载镜像
#docker pull 镜像名[:tag]
[root@localhost docker]# docker pull mysql
Using default tag: latest #如果不写tag,默认是latest
latest: Pulling from library/mysql
d121f8d1c412: Already exists #分层下载,docker image的核心,联合文件系统
f3cebc0b4691: Already exists
1862755a0b37: Already exists
489b44f3dbb4: Already exists
690874f836db: Already exists
baa8be383ffb: Already exists
55356608b4ac: Already exists
dd35ceccb6eb: Already exists
429b35712b19: Already exists
162d8291095c: Already exists
5e500ef7181b: Already exists
af7528e958b6: Already exists
Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
docker rmi 删除镜像
docker rmi -f [Image ID]
docker rmi -f [Image ID] [Image ID] [Image ID] #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部镜像
3.3、容器命令
说明:有了镜像才可以创建容器。
3.3.1、测试下载centos镜像。linux.
docker pull centos
3.3.2、新建容器并启动
docker run [可选参数] image
#参数说明
--name ="name" 容器名字 tomcat01 tomcat02
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p 主机端口:容器端口(常用)
-p 容器端口
-p 随机指定端口
#测试
docker run -it centos /bin/bash
容器退回主机:exitdoc
3.3.3、列出所有运行的容器
docker ps
-a #列出当前正则运行的容器+历史运行的容器
-n=? #显示最近创建的容器
-q 只显示容器的编号
3.3.4、退出容器
exit
ctrl + p +q #容器不停止退出
3.3.5、删除容器
docker rm 容器id
docker rm -f $(docker ps -aq)删除所有
3.3.6、启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #强制停止当前容器
3.3.7、查看日志
#显示日志
-tf #显示日志
--tail number 要显示的日志条数
docker logs -tf --tail 10 容器id
3.3.8、查看容器中进程信息
docker top
3.3.9、查看镜像的元数据
docker inspect 容器id
3.3.10、进入当前正在运行的容器
#方式一
docker exec -it 容器id bashShell
#方式二
docker attach 容器id
区别:
docker exec 进入容器后开启新的终端,可以进行操作(常用)
docker attach 进入正则运行的终端
3.3.11、从容器内拷贝文件到主机
docker cp 容器id:容器内路径 目标主机路径
3.3.12、网络
创建容器时不指定网络时默认是桥接网络,后续更改容器的网络有两种方式:
第一种:停止并删掉容器,重新创建容器指定网络连接(不建议)
第二种:直接修改容器的网络
1.创建自定义网络
docker network create 网络名称
2.解除容器所绑定的现有网络
docker network disconnect 网络名称 容器名称
3.容器重新指定网络连接
docker network connect 网络名称 容器名称
4.重启容器
docker restart 容器名称
5.查看容器详细信息
docker inspect 容器名称
4、安装nginx镜像
docker search nginx #搜索
docker pull nginx #下载
docker images #列出镜像
docker run -d --name nginx01 -p 3344:80 nginx
#后台运行
-d 后台运行
--name 起别名
-p 映射端口
5、docker安装一个tomcat
docker run -it --rm tomcat:9.0 #用完即删
docker pull tomcat:9.0
后台启动+映射端口
docker run -d -p 3355:8080 --name tomcat01 tomcat
进入tomcat
docker exec -it tomcat01 /bin/bash
6、安装es+Kibana
#看官网
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.9.1
docker stats 查看内存容量
7、Kibana
8、portainer镜像管理
Docker的图形化管理界面,提供后台面板操控
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
#主机:9000
密码:Aa123456
9、使用数据卷
- 方式一
docker run -it -v 主机目录:容器目录
10、部署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=a123456 --name mysql101 mysql
# -e 配置环境。添加密码
#-d 后台运行
#-p 端口映射
#-v 卷挂载
#--name 别名
测试连接:192.168.6.128:3310
- 修改mysql8.0密码格式
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
- 具名和匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P -v /ect/ngnix nginx #只声明了容器内路径,主机挂载为声明,匿名挂载
#具名挂载
docker run -d -P -v /home/ngnix:/etc/ngnix nginx
docker volume inspect 容器名 #查看容器挂载信息
11、容器数据卷容器
12、DockerFile
1、编写一个dockerfiler文件
2、docker build 构建成为一个镜像
3、docker 运行镜像
4、docker push 发布镜像
12.1、构建过程
- 每个保留关键字(指令)都是大写字母
- 执行从上而下进行执行
- #表示注释
- 每一个指令都会创建提交一个新的镜像层,并提交
12.2、指令
FROM #基础镜像
MAINTAINER #镜像是谁写的
RUN #镜像构建需要运行的命令
ADD #步骤,添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定容器启动的时候要运行的命令
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被集成的DockerFile,这个时候就会运行ONBUILD的指令。触发指令
COPY #类似ADD,将我们文件拷贝的镜像中
ENV #构建的时候设置环境变量
12.3、实战测试
- 创建自己的centos
- 创建dockerfile文件
FROM centos
MAINTAINER jeffshaw<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUM yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "----end---"
CMD /bin/bash
~
~
执行构建
localhost dockerfile]# docker build -f mydockerfile -t mycentos:0.1 .
12.4、实战:Tomcat镜像
- 准备镜像
[root@localhost tomcat]# ll
总用量 150764
-rw-r--r--. 1 root root 11264531 9月 10 16:44 apache-tomcat-9.0.38.tar.gz
-rw-r--r--. 1 root root 143111803 9月 23 16:54 jdk-8u261-linux-x64.tar.gz
- 编写dockerfile
#dckerfile文件
FROM centos
MAINTAINER jeff<[email protected]>
COPY readme.txt /usr/local/readme.txt
# 添加jdk、tomcat
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.38.tar.gz /usr/local/
# # 工作路径
ENV MYPATH /usr/local
WORKDIR $MYPATH
# # 容器命令最高权限
RUN chmod -R 777 /usr/local
# java环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.38
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.38
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
# 暴露端口
EXPOSE 8080
# 启动指令
CMD /usr/local/apache-tomcat-9.0.38/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.38/bin/logs/catalina.out
~
- 构建
docker build -t diytomcat .
- 启动
docker run -d -p 9090:8080 --name jeffshawnewtomcat -v /home/jeffshaw/build/tomcat/test:/usr/local/apache-tomcat-9.0.38/webapps/test -v /home/jeffshaw/build/tomcat/tomcatlogs:/usr/local/apche-tomcat-9.0.38/logs newtomcat
13、Docker网络
ip addr
--link 容器网络联通ping
- 自定义网络
网络模式:
bridge: 桥接
-net bridge
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet #自定义网络
docker run -d -p -name tomcat01 --net mynet tomcat #示例
容器与网络连通
docker network connect mynet tomcat01
13、Springboot微服务打包Docker镜像
- 能成功运行的jar包
- Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- Docker构建镜像
docker build -t jeffshow .
- 启动
docker run -d -P --name jeffshaw-springboot-web jeffshow
#-P随机暴露一个端口
- 访问即可
评论区