docker
Docker
镜像命令
docker images
docker search 镜像
docker pull 镜像:latest
docker system df 所占空间
docker rmi xxx
docker rmi -f $(docker images -aq) 删除全部ubuntu容器
docker pull ubuntu
docker run [options]image[command][arg]
--name="名字"
-d 后台运行
-i 交互模式运行容器,通常与-t同时使用
-t 分配一个伪输入终端,通常与-i同时使用
-P 随机端口
-p 指定端口
docker run -it ubuntu /bin/bash
docker ps 查看正在运行的容器
docker run -it --name=kino ubuntu bash#退出容器
run进容器,exit或CTRL+D 容器停止,docker ps中无容器
run进容器,CTRL+p+q 容器不停止,docker ps能看到容器
root@xxxxxx:/# read escape sequence#重连容器
容器未停止:
docker attach 容器ID或名字
容器停止:
docker start 容器ID或名字
再docker attach 容器ID或名字
docker exec -it 容器名字 /bin/bash
attach与exec的区别:
attach直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止
exec打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器停止docker restart 容器ID/name
docker stop 容器ID/name
docker kill 容器ID/name
#删除容器
docker rm 容器ID/name
docker rm -f 容器
一次删除多个容器
docker rm -f $(docker ps -aq)
docker ps -aq|xargs docker rm xargs一般配合管道符使用重要指令
docker run -d:后台跑一个容器,如果跑的是Ubuntu就不会成功,准确的说是一旦启动就会停止,因为Ubuntu是一个操作系统不是一个后台程序 !!!
以redis演示前后台区别
docker run -it --name=zero redis
ctrl+c 退出容器就停止
docker run -d --name=zero redis
后台模式,不会停止docker logs 容器 容器日志
docker top 容器 查看容器内进程
docker inspect 容器 容器细节容器内拷贝文件
docker cp 容器ID或名字:容器内路径 目标主机路径
docker cp zero:/tmp/1.txt /opt导入与导出容器
export : 导出容器的内容流作为一个tar归档
docker export 容器名 > /opt/ubuntu.tar
import从tar包的内容创建一个新文件系统,再导入为镜像
cat 文件名.tar|docker import- 镜像用户/镜像名:版本号Commit命令
进入容器首先要apt update,然后才能用apt install
docker commit制作镜像
docker commit -m="需要提交的信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
docker commit -m="add vim ok" -a="yyl" kino myubuntu上传阿里云
docker私有库
registry
容器卷 (-v 最好都带上–privileged=true)
docker run -it -v 宿主机绝对路径:容器内目录 镜像名 --privileged=true容器卷与主机互通互联
docker run -it --privileged=true -v /tmp/data:/tmp/data myubuntu /bin/bash
在主机或在容器内的/tmp/data目录下创建文件,另一边都会同步当我们的容器停止时,在主机内/tmp/myhostdata里面写入文件,在start容器,发现依旧同步过去了
安装软件 (在运行时要-p端口,最好是-d后台模式)
tomcat
docker pull tomcat
docker run -it --name=tomcat1 -p 8080:8080 tomcat
docker exec -it tomcat1 /bin/bash #进入虚拟终端
最新版tomcat还无法访问
要先删除rm -r webapps
然后mv webapps.dist webapps #把webapps.dist重命名,因为真正的内容在webapps.dist中
最后访问映射的端口即可mysql
docker pull mysql:5.7
docker run -it -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
# 一些参数的顺序不能错,错了启动不成功有好多就不试了
感觉用不上
Dockerfile
基础知识
- 每条保留指令都必须为大写字母且后面要跟至少一个参数
- 指令按照从上往下顺序进行
- #表示注释
- 每条指令都会创建一个新的镜像层并对镜像进行提交
FROM 指定是基于哪个镜像的,第一条必须是FROM
MAINTAINER 镜像维护者姓名和邮箱地址
RUN 镜像构建时需要运行的命令
有两种格式,shell和exec格式,run在docker build时运行
EXPOSE 暴露的端口
WORKDIR 终端默认登陆的目录
USER 指定用户
ENV 设置环境变量
/*
* ENV MY_PATH /usr/mytest
* WORKDIR $MY_PATH
*/
VOLUME: 容器卷
ADD: 江苏主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
CMD: 容器启动后要干的事
/*
* shell格式: CMD <命令>
* exec格式: CMD ["可执行文件","参数1","参数2"]
*参数列表格式: CMD ["参数1","参数2"]
*/
ENTRYPOINT ["<executeable>","<param1>","<param2>"]
当ENTRYPOINT与CMD同时存在时,CMD的作用是给ENTRYPOINT传递参数
/*
*ENTRYPOINT ["nginx","-c"]
*CMD ["/etc/nginx/nginx.conf"]
*/#boogipop大佬的案例
FROM centos:7
#新版centos8会对yum报错,引用centos7
MAINTAINER zzyy<zzyybs@126.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u191-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u191-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_191
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bashdocker build -t centosjava8:1.5 .
docker run -it --name=centos-1 centosjava8:1.5 /bin/bash
Docker network
安装docker后,在ifconfig中会看到一个docker0的虚拟网桥
docker就是通过这个虚拟网桥来和宿主机交流
docker network ls:查看docker网络模式
docker network create 网络名字:创建一个网络
docker network inspect 网络名字:查看网络配置


说明这个ip是变动的
docker
https://zer0peach.github.io/2023/11/11/docker/