docker VS 虚拟机
- 虚拟机虚拟自己的硬件,运行操作系统,app运行在自己内核上
- 容器里的app直接运行在主机的内核上,有更少的抽象层
- 容器彼此之间隔离,拥有独立的文件系统
docker的概念
- 仓库:存放镜像的仓库
- 镜像:类似于java的类,可以由镜像创建实例化的容器
- 容器:可运行若干应用,可看做事小型的linux
docker run和docker的原理
ducker run
先在本地寻找镜像,没有找到就到仓库找,仓库找到会下载到本地运行
docker
docker是client-server架构,客户端利用socket连接服务器,守护进程会负责创建、销毁容器
docker常用命令
镜像命令
docker images #查看镜像
-a #全部
-q #只显示id
-aq #显示所有id
docker info #查看docker详细信息
docker search #查找进行
--filter=STARS=500 #只要star=500及以上
docker pull #拉去镜像
docker rmi #删除镜像
-f
docker rmi -f $(docker images -aq) #全部删除
容器命令
docker run [容器名]#创建容器实例
docker ps #查看正在运行的容器
-a #查看所有容器包含之前运行的
-q #值查看容器id
-it /bin/bash #交互运行
-d #后台运行
docker start [容器id] #启动容奇
docker restart#重启容器
docker rm #删除容器
-f#强制删除
docker stop#停止容器
docker kill#强制停止
#删除所有容器
docker ps -aq|args docker rm
常见命令
#查看日志
docker logs -tf --tail [条目数] [ID]
#重看容器内的进程
docker top [ID]
#查看容器元数据
docker inspect [ID]
#进入容器
docker exec -it [ID] #新开一个终端
docker attach [ID]
练习
部署nginx
docker run -d --name nginx01 -p80:80 nginx
部署ES
docker run -d --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e ES_JAVA_OPTS="Xms64m Xmx512m" \
docker.elastic.co/elasticsearch/elasticsearch:7.14.0
部署tomcat
docker run -d --name tomcat -p8080:8080 tomcat
联合文件系统
将文件系统分层,不同容器可以共用相同文件,提升复用率
commit文件
docker commit -m="1st test" -a="manubu" 81c1de1cfe8d manubu/tomcat:1.0
数据卷
用于容器持久化数据到宿主机,容器之间的内存共享
指定方式
#删除容器之后,数据仍然保存在宿主机
docker run -it -v /home/ceshi:/home centos /bin/bash
具名方式
#具名方式创建
docker run -d -v juming:/home centos
#查看具体目录
docker inspect 8c53929f6393c01f76ddc8d4befa4b03bef93da22a76d9353eae3c5f1d5b79e7
#结果
"Mounts": [
{
"Type": "volume",
"Name": "juming",
"Source": "/var/lib/docker/volumes/juming/_data",
"Destination": "/home",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
匿名方式
docker run -it -v /home centos /bin/bash
容器之间
#常见匿名挂载
docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d -v /home -v /var/lib/mysql mysql:8.0
#共享匿名挂载,只有所用共享容器被清除,数据才会被清除,
docker run --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d -volumes-from mysql01 mysql:8.0
dockerfile
常见命令
1. `FROM <base_image>`:指定基础镜像,所有其他命令都基于这个基础镜像构建
2. `MAINTAINER <author>`:指定镜像的作者
3. `RUN <command>`:在镜像中运行指定的命令,用于安装软件、更新包等操作。
4. `COPY <src> <dest>`:将本地文件或目录复制到镜像中。
- 例如:`COPY app.py /app/`
5. `ADD <src> <dest>`:类似于`COPY`命令,但还支持从URL下载并解压文件。
- 例如:`ADD https://example.com/archive.tar.gz /`
6. `WORKDIR <path>`:设置工作目录,在后续命令中执行操作的默认路径。
- 例如:`WORKDIR /app`
7. `EXPOSE <port>`:声明容器运行时将会监听的端口,但并不会自动映射到主机端口。
- 例如:`EXPOSE 80`
8. `ENV <key> <value>`:设置环境变量,用于在容器内部配置。
- 例如:`ENV DB_HOST=localhost`
10. `CMD ["executable", "param1", "param2"]`:设置容器启动时的默认执行命令,如果在运行容器时没有指定命令,则会执行这个命令。
- 例如:`CMD ["python", "app.py"]`
11. `ENTRYPOINT ["executable", "param1", "param2"]`:类似于`CMD`,但可以向其后追加,而不会覆盖。
12. `VOLUME ["/data"]`:声明一个挂载点,允许容器数据持久化存储,但不会将主机上的数据复制到镜像。