1.容器认识
容器是打包APP一家子的东西。
镜像是月饼模子,容器是月饼,仓库是月饼盒子。
虚拟机开机自启
设置开机自启:
systemctl enable docker
查看开机自启:
systemctl is-enabled docker
2.镜像命令
搜索镜像:
docker search 镜像名
获取镜像:
docker pull 仓库名称:【标签】
例如:cnetos:7.5
镜像是一个联合系统。
查看镜像信息:
docker images(查看本地所有镜像)
docker inspect 镜像id
删除镜像:
docker rmi 镜像名称:标签
docker rmi 镜像ID
镜像改标签(重命名):
docker tag
例如:docker tag nginx nginx:nginx-test1
由nginx改为nginx-test1
删除单个:
docker rmi -f 镜像ID
-f:表示强制删除
删除多个:
docker rmi -f 镜像名1:tag 镜像名2:tag
全部删除:
docker rmi -f $(docker images -qa)
3.容器命令
列出所有正在运行的容器:
docker ps
-a:列出当前所有正在运行的容器+历史上运行过得
-l:显示最近创建的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
--no-trunc:不截断输出
启动容器 :
docker start 容器的id/容器名
创建并启动容器:
docker run
docker run -it --name
两种启动方式:
-it:交互式(直接进去)
-d:守护式(没有进去)
创建容器:
docker create
退出容器:
exit(Ctrl+d):退出容器就会停止。
Ctrl+p+Q:退出容器,容器还在运行。
进入容器:
docker attach:一个直接进入终端。(必须进入)
docker exec:可以进入也可以不进入,返回结果到宿主机。
启动容器:
docker start 容器名或容器ID
重启容器:
systemctl restart docker
停止容器:
docker stop 容器名或容器ID
强行停止:
dokcer kill 容器名或容器ID
容器改名字:
docker rename 容器旧名字 容器新名字
删除已停止容器:
docker rm 容器ID
docker rm -f $(docker ps -a -q)
一次性删除多个容器:
docker ps -a -q lxargs docker rm
查看容器日志:
docker logs -f -t -t --tail 容器ID
-t:是加入时间
-f:跟随最新的日志打印
--tail:数字显示最后多少条
基于容器创建镜像:
docker commit [option] 容器id 镜像名
将容器转换成文件:
docker export 容器id/容器名 > 文件名
将文件转换成镜像:
docker 文件名 |docker import - 镜像名[标签]
查看容器内部细节:
docker inspect
4.Dockerfile
先创建一个目录或文件夹:
在里面创建一个Dockerfile文件
vi Dockerfile
FROM centos:7
RUN yum install -y vim
RUN mkdir aa
RUN echo "build by Dockerfile">aa/1.txt(RUN表示运行)
RUN是创建时运行命令
CMD和NETRYPOINT是在容器内运行的
运行命令:
docker build .
docker build -t 标签名 .
docker build -f 要运行文本文件的目录 . (.代表当前路径)
指定目录:
文本文件内输入:
WORKDIR (所指定的目录)
多次设置WORKDIR绝对路径,结果为最后一个
若前一个绝对路径后面添加一个相对路径,则会在绝对路径后加上相对路径。
查看容器网络:
docker network ls
查看bridge网络的底层细节:
docker network inspect bridge
创建单机桥接网络:名为localnet
docker network create -d bridge localnet
驱动设置为bridge
安装工具查看brctl网桥:
yum install bridge-utils
brctl show
docker network creade -d bridge locanat
docker run --name --network local
查看localnet详细信息:
docker network inspect localnet
创建单机桥接网络,名字为localnet:
docker network create -d bridge localnet
docker run -d --name c1 --network locanet alpine sleep 1d
保护式进入:-d 容器名字:c1 网络:locanet 镜像名字:sleep 1d
docker run -it --name c2 --network localnet alpine sh
创建名为“c2”的容器,并接入“c1”所在的localnet网络。
docker run -d --name test1 --nework none nginx /bin/sh -c "while true;do sleep 3600;done"
网络:none 镜像:nginx
单主机网络模式:
host:使用宿主机的ip和端口。
none:该模式关闭了容器的网络功能,与宿主机、与其他容器都不连通。(手动配置)
docker network create -d macvlan \
--subnet=主机ip/24 \
--gateway=主机网关 \
-o parent=ens33 mac1
查看容器位置:
ls /var/lib/docker
ls /var/lib/docker/containers
创建和管理容器卷:
卷是持久化。
docker volume create(创建卷) 卷名
docker volume inspect(查看卷) 卷名
使用prune会询问是否要删除
使用rm则会直接删除
docker volume prune(删除所有不用的)
docker volume rm(删除一个或多个)
挂载卷:
-v
--mount <键>=<值>,<键>=<值>
docker run -it --mount source=myvol2,destination=/vol --name c03 centos
键是固定的。
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it -v /var/log:/word centos
容器内创建的文本文件与宿主机相关联
更改容器内的文本文件或宿主机的文本文件,容器和宿主机都会发生改变。
就算删除容器,文本文件也会保留在宿主机里面。
卷就是文件夹,在宿主机里面和容器里面存在。
compose文件:
每个冒号与后面的参数之间都要加一个空格。
version:3.5(版本号)(compose的版本)
service:服务
web-fu:
build:.
command(相当于CMD):python app.py(打开python文件)
ports:(端口)
network:(这个服务的网络)
volumes:(卷)
redis:
networks:
volumes:
(用空格空开)
分成了三层key。
可以用-f来制定
docker-compute up(构建所需的镜像,创建容器和卷)
停止应用并删除(容器和网络删除):
docker-compose down
查看应用状态:
docker-compose ps
查看进程:
docker-compose top
停止应用:
docker-compose stop
对于已停止的应用,进行删除。
docker-compose rm
重启应用:
docker-compose restart