docker笔记

安装docker

  1. 查看系统内核环境 uname -r

    3.10.0-1160.el7.x86_64
    
  2. 查看系统版本 cat /etc/os-release

    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
  3. 安装需要的安装包

    yum install -y yum-utils
    
  4. 设置阿里云镜像仓库

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
  5. 更新软件包索引

    yum makecache fast
    
  6. 安装 最新版本 社区版

    yum install docker-ce docker-ce-cli containerd.io
    
  7. 启动docker

    systemctl start docker
    docker version
    
  8. 构建hello-world程序

    docker run hello-world
    
  9. 查看下载的hello-world镜像

    docker images
    
  10. 卸载docker

    yum remove docker-ce docker-ce-cli containerd.io
    rm -f /var/lib/docker
    

docker run启动流程

  1. 在本机查找镜像,找到直接运行

  2. 若找不到,到仓库中查找镜像,找到后下载到本地,直接运行

底层原理

  1. docker是一个client-server结构
  2. 客户端通过socket与主机交互,通过后台守护进程创建docker容器实例

新建一个容器,docker使用宿主机操作系统,无需重新再加载内核。而虚拟机需要加载Guset OS。

设置镜像地址

vi /etc/docker/daemon.json

输入镜像地址
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

保存文本,重启docker
systemctl restart docker

docker常用命令

docker info #显示docker主机详细信息
docker version #docker版本
docker xxx --help #查看命令帮助

镜像命令

docker images         #查看docker镜像
docker search xxx     #搜索xxx镜像  --filter=STARS=3000 过滤3000以上
docker pull xxx       #下载xxx镜像的最新版
docker pull mysql:5.7 #下载mysql5.7版本
docker rmi -f xxx     #根据xxx镜像id,删除镜像
docker rmi -f $(docker images -aq) # 删除所有镜像

分层下载 docker images核心 联合文件系统

容器命令

docker run [可选参数] image

--name="NAME"                 容器名字
-d                            后台运行
-it                           使用交互方式运行,进入容器查看内容
-p 主机端口:容器端口           指定容器端口
 
docker run -it centos /bin/bash  #启动并进入容器

exit                             #从容器中退出
ctrl + P + Q                    #容器不停止,退出

docker ps                       #查看运行中容器
docker ps -a                    #当前+历史容器
docker ps -a -n=1               #最近的容器
docker ps -aq                   #当前所有的容器编号
 
docker rm 容器id                 #根据id删除容器,不能删除正在运行容器
docker rm -f $(docker ps -ap)    #强制删除所有容器,包括正在运行的

docker start   #启动容器
docker restart #重启容器
docker stop    #停止容器
docker kill    #强制当前容器

docker inspect 容器id                 #查看容器详细信息
docker exec -it 容器id /bin/bash      #打开新的终端,进入容器
docker attach 容器id                  #进入容器正在执行的终端

从容器拷贝到主机

在主机终端
docker cp 容器id:容器路径  主机路径
#加--rmc下载完tomcat,执行后删除
docker run -it --rm tomcat:9.0

提交容器到本地镜像

docker commit -m="docker镜像描述" -a="作者" 容器id 镜像名:版本号

容器数据卷

使用命令直接挂载

docker run -it -v 主机目录:容器内目录 镜像id /bin/bash

# 挂载mysql文件目录
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123 --name mysql01 mysql:5.7
# -e 环境配置

具名挂载和匿名挂载

# 匿名挂载 不指定主机地址 而指定容器内部地址
docker run -d -P -v /etc/nginx nginx 
# -P 随机映射

docker volume ls # 查看所有卷

# 具名挂载 -v之后没有/而是一个具名,代表容器内部地址映射主机地址的名称
docker run -d -P -v juming-nginx:/etc/nginx nginx

docker volume inspect juming-nginx # 查看具名对应主机的路径

# 数据卷具体位置在主机 /var/lib/docker/volumes 

# 通过-v 容器内路径:ro rw 改变读写权限  ro只读 rw可读可写

使用dockerfile 挂载目录

FROM centos
VOLUMES ["volume01","volume02"]

docker bulid -f dockerFile目录 -t /容器名称:版本 . # 根据dockerFile生成镜像

# 注意最后面有一个.表示当前目录是上下文环境,代表从当前目录下找到dockerFile文件
docker inspect 容器id #可以在Mounts看到挂载的两个volumes对应主机目录

容器数据卷(容器之间目录同步)

docker run -d --name docker02 --volumes-form docker01 centos 
# 通过--volumes-from 容器id 同步docker01的挂载目录

Dockerfile

# 构建自己的centos
FROM centos 

ENV MYPATH /usr/local
WORKDIR #MYPATH       # 进到容器中的默认,工作目录

RUM yum -y install vim  # 镜像构建时会执行的命令
RUM yum -y install net-tools

EXPOSE 80

CMD /bin/bash   # 容器启动时执行的命令
docker history  镜像id # 查看镜像历史

CMD和ENTRYPOINT区别

CMD 指定容器启动时运行的命令,只有最后一个会生效

FROM centos
CMD ["ls","-a"]

镜像run的时候执行最后一个CMD命令,如果run命令后有追加命令,会将文件中的CMD替换掉

docker run 镜像命令 -l # 这时-l会把CMD命令替换,产生报错
docker run 镜像命令 ls -al

ENTRYPOINT 容器启动运行的命令,可以追加命令

FROM centos
ENTRYPOINT ["ls","-a"]

镜像run时,追加命令时,是可以与ENTRYPOINT中的命令追加

构建tomcat镜像

FROM centos
ADD jdkxxx.tar.gz  # 引入jdk
ADD tomcatxxx.tar.gz # 引入tomcat

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

# 配置java环境变量
ENV JAVA_HOME /usr/local/jdk1.8xxx
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

# 配置tomcat环境变量
ENV CATALINA_HOME /usr/local/tomcatxxx
ENV CATALINA_BASH /usr/local/tomcatxxx

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_BASH/bin

EXPOSE 8080

CMD /usr/local/tomcatxxx/bin/startup.sh

修改tag

docker tag 镜像id username/imagename:1.0
posted @ 2021-11-07 22:34  dxyoung  阅读(45)  评论(0)    收藏  举报