docker笔记

本文详细介绍了Docker的基本操作,包括启动、停止、删除容器和镜像,以及如何使用数据卷持久化数据。此外,还讲解了Dockerfile的编写,如EXPOSE、WORKDIR、CMD和ENTRYPOINT等指令的用法,以及Docker网络配置和Docker Compose的使用。最后提到了Docker的健康检查和容器间通信的方法。
摘要由CSDN通过智能技术生成

https://www.bilibili.com/video/BV1ZT4y1K75K?p=18&spm_id_from=pageDriver

启动镜像
docker run -d (-it) -p XXXX:XXXX --name XXX image_name -it直接进入容器

停止所有的容器
docker stop $(docker ps -aq) -q正在运行 -aq返回所有容器id

删除所有容器
docker rm $(docker ps -aq)/单个 id

删除所有镜像
docker rmi $(docker images -q) 强制删除 docker rmi -f $(docker images -q)

拉取镜像
docker pull [options] name[:tag|@digest]

查看运行中/所有容器
docker ps -a

重新启动已经退出的容器
docker restart nginx102

进入已存在容器
docker exec -it container_name/container_id /bin/bash

-d后台

-p可以映射多个 8081:8080

日志

docker logs
docker logs -f container_name/container_id 实时展示日志
docker logs -tf container_name/container_id 加入时间戳
docker inspect container_name/container_id 详细信息

文件操作

从系统到容器 docker cp 文件/目录 container_id(name):container_path
从容器到系统 docker cp container_id(name):container_path 宿主机目录

数据卷

特点:
在这里插入图片描述

1自定义

docker run --name xxxx -p XXXX:XXXX -v /宿主机目录:/容器目录 -it imagename (/bin/bash
–name: 为容器起名字

-p:宿主机端口:docker端口 (端口映射)

-v:宿主机目录:容器目录 (必须为绝对路径) 若宿主机目录下无文件,容器目录下有文件,会清空

容器只读 不能影响宿主机,加:ro 容器不影响宿主 宿主能影响容器
docker run --name xxxx -p XXXX:XXXX -v /宿主机目录:/容器目录:ro -it imagename

2自动
docker run --name xxxx -p XXXX:XXXX -v vol_name:/容器目录 (-it) imagename
注意不存在vol_name数据卷自动创建数据卷会自动映射主机 会拷贝容器内的文件到宿主机目录中(需要备份容器数据时用,备份后可以重新挂载一个数据卷)

find / -name vol_name查找地址

容器打包成新镜像(环境和应用打包) 但一般不用commit 用dockerfile
docker commit -m “描述信息” -a “作者信息” container_id/(name) 镜像名字:标签
打包正在运行的容器 容器会短暂暂停

镜像存储至本地

docker save 镜像名 -o 名字.tar

docker save nginx:1.17 -o nginx-1.17.tar
加载镜像
docker load -i 名字.tar / docker load < 名字.tar

核心总结

在这里插入图片描述

服务安装

一般使用docker要储存数据 和修改配置文件

mysql

在这里插入图片描述
数据卷挂载后即使删除容器也会存在,
若宿主机数据卷内有数据,可以将文件加载至容器数据卷
若数据卷为空,挂载到容器中有数据的目录,会将数据备份至宿主机

可以使用多个-v  用来挂载数据 和配置等多个目录 

在这里插入图片描述

注意:若修改配置中的ip信息,与之前运行容器指定ip不同,无法映射,需要重新创建容器.

tomcat

在这里插入图片描述

redis

在这里插入图片描述

ES

**加粗样式**
在这里插入图片描述

dockerfile

在这里插入图片描述

上下文目录
多层
临时镜像放入缓存

build

创建dockerfile文件 .会把当前目录下的所有文件打包,建议单独新建一个文件夹里面放dockerfile
docker build-t image_name:TAG .

FROM 镜像:版本号 
FROM Centos:7

RUN <command>
RUN yum install -y vim

RUN ["executable", "param1", "param2"]
RUN ["yum","install","-y","vim"]


EXPOSE <port> [<port>/<protocol>...] 暴露端口外部才能映射
EXPOSE 80/tcp
EXPOSE 80/udp


WORKDIR /path/to/workdir 
为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使在任何后续Dockerfile指
中未使用,也会创建它。WORKDIR指令可在Dockerfile中多次使用。如果提供了相对路径,则该路径将与上一条WORKDIR指令的路径相对
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
/a/b/c

COPY <src>... <dest>   
COPY ["<src>",... "<dest>"]

COPY a.cpp /data/a
COPY 文件 /path 文件可以相对路径也可以绝对路径 一般放进dockerfile文件夹中

ADD 
ADD <src>... <dest>   
ADD ["<src>",... "<dest>"]
如果源文件是个归档文件(压缩文件),则docker会自动帮解压。

COPY指令和ADD指令的唯一区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。
而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。

如果源路径的资源发生变化,则该ADD指令将使Docker Cache失效,
Dockerfile中后续的所有指令都不能使用缓存。因此尽量将ADD指令放在Dockerfile的后面。
当要读取URL远程资源的时候,并不推荐使用ADD指令,而是建议使用RUN指令,在RUN指令中执行wget或curl命令。


VOLUME
VOLUME /path
VOLUME 与 docker -v 区别
Dockerfile中 VOLUME 方式挂载到宿主机上的是匿名卷,在宿主机上是自动匿名挂载到 /var/lib/docker/volumes/ 目录下的,宿主机上
的挂载目录名是随机生成的
https://www.jb51.net/article/208191.htm


ENV
ENV <key>=<value> ...
该值可以在构建阶段的所有后续指令的环境中使用,也可以在许多指令中内联替换。将为其他环境变量解释该值

ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
ENTRYPOINT一般设置容器启动的第一个命令

CMD
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
采用中括号形式,那么第一个参数必须是命令的全路径才行
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

CMD echo "hello cmd!"
CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]

Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令生效.
如果我们在run时指定了命令或者有entrypoint,那么cmd就会被覆盖.这也是为什么大多数网上博客论坛说的“cmd会被覆盖”,
因为cmd的角色定位就是默认,如果你不额外指定,
那么就执行cmd的命令,否则呢?只要你指定了,那么就不会执行cmd,也就是cmd会被覆盖。

ENTRYPOINT 不会自动被run指令覆盖,要使用参数 --entrypoint=XX
在这里插入图片描述

区别:https://blog.csdn.net/u010900754/article/details/78526443
在这里插入图片描述
总结下一般该怎么使用:一般还是会用entrypoint的中括号形式作为docker 容器启动以后的默认执行命令,里面放的是不变的部分,可变部分比如命令参数可以使用cmd的形式提供默认版本,也就是run里面没有任何参数时使用的默认参数。如果我们想用默认参数,就直接run,否则想用其他参数,就run 里面加参数。

在CMD模式下 :不加参数跑cmd默认 加了跑entrypoint
ENTRYPOINT [“executable”, “param1”, “param2”]
CMD [“executable”,“param1”,“param2”] (exec form, this is the preferred form)
shell模式下 cmd和entrypoint都不行
所以都用cmd[]模式

在这里插入图片描述
不加参数默认跑 ems, 加了自定义

Docker 通讯机制

在这里插入图片描述
docker inspect container_name/container_id 看桥链接信息

网关172.17.0.1
ip地址 172.17.0.3
在这里插入图片描述
在运行一个容器
网关172.17.0.1
ip地址 172.17.0.2

实现互通
在这里插入图片描述

上述方式如果只用默认网桥会影响带宽,所以需要构建自己的网桥

Docker网络使用

a 默认网桥

docker network ls 查看默认网桥 name为 bridge

有如下指令
在这里插入图片描述

b 自定义桥连接

docker network create name / docker create -d bridge name

c创建`

网桥需要先创建才能用 不能自动创建

docker run -d -p XXXX:XXXX --network 网桥名字 --name 容器名字 镜像:标签`

不同桥连接的网段会不同 ,一旦指定了网桥后,当前的ip地址与容器id进行映射,也即通过容器id就可以访问容器的ip地址. 172.XX.XX.XX=container_id

查看网桥信息 docker inspect name 可以看到所有网桥上的容器ip地址

下载:
国内镜像 github太慢

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

给执行文件权限

sudo chmod +x /usr/local/bin/docker-compose

Dcok Compose

在这里插入图片描述

在这里插入图片描述
模板名为 docker-compose.yml
启动 docker-compose up

请添加图片描述
env_file
在这里插入图片描述
depends_on
注意是服务名
在这里插入图片描述

healthcheck:
通过命令检查容器是否健康运行。
test: [“CMD”, “curl”, “-f”, “http://localhost”]
interval: 1m30s
timeout: 10s
retries: 3

sysctls
配置容器内核参数。
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
ulimits
指定容器的 ulimits 限制值。
例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制)和40000(系统硬限制,只能 root 用户提高)。
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000

docker-compose build
省略docker-build过程 指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值