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 镜像构建时需要运行的命令
有两种格式,shellexec格式,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/bash

docker 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 网络名字:查看网络配置

image-20231112183200644

image-20231112183302812

说明这个ip是变动的


docker
https://zer0peach.github.io/2023/11/11/docker/
作者
Zer0peach
发布于
2023年11月11日
许可协议