一、Docker的安装
参考链接:
https://www.jianshu.com/p/9c96ea8e6f41
docker安装-----社区版ce(免费的,另一版本收钱的)
系统:centos 7.4
- 前提:内核版本需要不小于3.10,不然docker起不来
uname -r ###查看当前内核版本
- 安装docker的依赖包
yum install -y yum-utils lvm2 device-mapper-persistent-data
-
配置docker源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
可以配置国内阿里云或者使用中国科学技术大学镜像地址
使用中科大镜像地址:
yum-config-manager --add-repohttps://docker.mirrors.ustc.edu.cn
- 可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
或者:
yum -y install docker-ce (默认版本是ce的稳定版本)
时间比较长(网速快,就越快)
报错:
原因:和Podman冲突
解决方法:
(1)查看是否安装Podman
rpm -q podman
podman-1.4.2-5.module_el8.1.0+237+63e26edc.x86_64
(2)删除Podman
dnf remove podman
- 重启docker
chkconfig docker on ### 开机启动
service docker start ###启动docker
- 查看docker是否安装成功
docker version
- 运行 hello-world
docker run hello-world
二、Docker的基本命令
- 查看一下下载的这个 hello-world镜像
docker images
- 配置阿里云镜像加速
ps:因为这边命令是私网可用,所以要选择自己的
- 镜像的基本命令
cat /etc/os-release #查看服务器版本等
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像跟容器的数量
docker --help #显示docker相关的帮助命令
docker search 镜像 #搜索镜像
例如:
docker search mysql
docker search tocmat
......
##也可以通过docker search --help查看可选项
例如:
docker search mysql --filter=STARS=5000 #显示星数stars大于5000的
docker pull 镜像 #下载镜像
例:
[root@iZuf62lho701dw47yyk2n7Z /]# docker pull mysql
Using default tag: latest # 如果不写tag,就默认是latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete #分层下载,docker image的核心,联合文件系统
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
1a8c919e89bf: Pull complete
9f3cf4bd1a07: Pull complete
80539cea118d: Pull complete
201b3cad54ce: Pull complete
944ba37e1c06: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
#签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#等价于它
docker pull mysql
docker pull docker.io/library/mysql:latest
#指定版本下载,指定的版本要在mysql镜像中
docker pull mysql:5.7
docker images -aq #查看所有存在镜像的id
docker rmi -f 镜像id #删除镜像
docker rmi -f 镜像id 容器id 镜像id #删除多个镜像
docker rmi -f $(docker images -aq) #删除全部的镜像
docker
- 容器的基本命令
ps:有了镜像才可以创建容器!可以下载一个centos镜像来测试!
docker pull centos
#启动并进入容器
docker run -it centos /bin/bash
#退出容器
exit #直接容器停止并退出
Ctrl + P + Q #容器不停止并退出
#docker ps 命令
无参数 #列出当前正在运行的容器
-a #列出当前正在运行的容器+历史运行过的容器
-n #显示最近创建的容器
例:docker ps -a -n=1 #显示1个容器
-q #显示所有容器的编号
例:docker ps -aq
#删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,或rm -f删除
docker rm -f $(docker ps -aq) #删除所有的容器
#启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
- 查看日志
#运行容器
docker run -it centos /bin/bash #交互式启动容器
docker run -d centos /bin/bash #后台方式启动容器
#查看容器日志,aa4feaece5e1为容器id,无日志可以Ctrl+C退出
docker logs -f -t --tail 10 aa4feaece5e1
#写个脚本输入日志
docker run -d centos /bin/bash -c "while true;do echo fly666;sleep 1;done"
#docker ps 查看刚才启动的容器id
#查看日志
docker logs -f -t --tail 10 5295fa02e879
- 查看容器的进程信息
#查看容器的进程信息
docker top 5295fa02e879
- 查看容器元数据信息
docker inspect 5295fa02e879
- 进入当前正在运行的容器
#进入当前容器
docker exec -it 5295fa02e879 /bin/bash
#进入当前容器
docker attach 5295fa02e879 #正在执行当前代码
#区别
docker exec #进入容器后开启一个新的终端,可以在里面操作
docker attach #进入容器正在执行的终端,不会启动新的进程
- 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 服务器路径
docker cp 服务器路径 容器id:容器内路径
1):启动一个容器centos
docker run -it centos /bin/bash
2):Ctrl + P + Q 不停止退出容器
3):查看容器的id
docker ps
4):在/home目录下,创建一个java文件,kuangshen.java
5):进入容器内
docker attach 9443b329a99a
6):在容器内/home目录下创建个java文件,test.java
7):exit退出当前容器
8):将容器内的test.java复制到服务器/home目录下
docker cp 9443b329a99a:/home/test.java /home
9):将服务器上/home目录下的kuangshen.java复制到容器内的/home目录下
docker cp /home/kuangshen.java 9443b329a99a:/home
三、部署nginx,tomcat
- 部署nginx
1):DockerHub上搜索nginx镜像
docker search nginx
2):拉取nginx镜像
docker pull nginx
3):创建nginx容器并启动
#取名为nginx01
docker run -d --name nginx01 -p 3344:80 nginx
# -d 后台运行
# --name 给容器命名
# -p 宿主机端口:容器nginx内部端口
4):本机测试
#显示html代码,出现Welcome to nginx!
curl localhost:3344
5):端口暴露的概念
#访问外网也就是公网ip的某个端口号时,需要先在阿里云将端口号加入安全组,然后在服务器上开放端口号并保证可用。
6):外网访问nginx01
7):进入nginx内
docker exec -it nginx01 /bin/bash
#可以查看nginx的相关信息
8):再启动一个nginx服务nginx02
docker run -d --name nginx02 -p 3345:80 nginx
#需要开放3345端口
#查看开启的端口号是否有3345
firewall-cmd --zone=public --list-ports
#添加3345端口号
firewall-cmd --zone=public --add-port=3345/tcp --permanent
#重启防火墙
firewall-cmd --reload
#查看3345端口号是否可用,出现yes即可
firewall-cmd --zone=public --query-port=3345/tcp
#查看防火墙状态,如果是dead状态,即防火墙未开启
systemctl status firewalld.service
9):测试nginx02能否访问
思考:每次改动nginx配置文件,都需要进入容器?十分的麻烦,要是在容器外部提供一个映射路径,达到在容器内部修改文件名,容器内部就可以自动修改了。-v 容器卷
- 部署tomcat
1):DockerHub上搜索tomcat镜像,只是为了查看有多少tomcat镜像
docker search tomcat
2):拉取tomcat镜像
docker pull tomcat
3):以后台方式启动tomcat
docker run -d --name tomcat01 -p 3350:8080 tomcat
#官方启动方式,用完即删。
docker run -it --rm tomcat:9.0
4):外网测试tomcat01
#可以访问,但是显示的404
5):404问题
#linux命令少了
#没有webapps文件
原因:阿里云镜像的原因。默认是最小的镜像,所有不必要的都剔除了。保证最小可运行环境。
解决:将webapps.dist内文件拷贝到webapps内。
6):将webapps.dist内的文件拷贝到webapps内
cp -r webapps.dist/* webapps
7):重新访问