docker(一): 基础

113 阅读4分钟

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战 [TOC]

Docker

快速入门

https://www.docker.com
https://docs.docker.com
https://github.com/docker/docker.ce

docker 一般指Docker Engine, 是一个客户端-服务器应用程序,由docker守护进程, 一个Rest API 指定与守护进程交互的接口, 和一个命令行接口(CLI)与守护进程通信(通过封装REST API)

组成

docker主机(Host): 安装Docker程序的机器

docker仓库(Registry): 用来保存各种打包好的软件镜像

docker镜像(images): 软件打包好的镜像,放在仓库中

docker容器(Container): 镜像启动后的实例, 独立运行的一个或一组应用

与虚拟机比较

特性容器虚拟机
启动速度秒级分钟级
性能接近原生较弱
内存代价很小较多
硬盘使用MB级别GB级别
运行密度单机上千台一般几十个
隔离性安全隔离完全隔离
迁移性优秀一般

安装

centos安装配置

http://mirrors.aliyun.com/centos/7/isos/x86_64
cat /etc/centos-release
yum install -y wget
mv /etc/yum.repos.d  /etc/yum.repos.d.backup
mkdir -p /etc/yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
yum repolist
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel -lt
grep initrd16 /boot/grub2/grub.cfg
grub2-set-default 0
reboot
uname -r
uname -a
lscpu
free
fdisk -l
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforece 0
vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-arptables=1
net.ipv4.ip_forward=1
net.ipv4.ip_forward_use_pmtu=1

sysctl --system
yum -y install bash-completion bash-completion-extras
source  /etc/profile.d/bash_completion.sh
yum -y install lrzsz
## 下载一个文件
sz filename
## 下载多个文件
sz filename1 filename2
## 下载目录下所有文件, 不包含文件夹
sz  dir/*

安装docker

教程

阿里云安装

前置条件

yum install -y yum-utils device-mapper-persistent-data lvm2

添加源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum list docker-ce --showdulicates | sort -r
yum -y install docker-ce
systemctl start docker 
systemctl status docker

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors":["https://exakpxqk.mirror.aliyuncs.com/"]
}
EOF
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
docker -v
docker version
docker info

docker 命令

docker 环境命令

docker [info|version] 

容器生命周期管理

docker [create|exec|run|start|stop|restart|kill|rm|pause|unpause]
  • docker run

    • -d --detach=false: 后台运行容器, 返回容器ID
    • -i --interactive=false: 以交互模式运行容器, 通常与-t同时使用
    • -P, --publish-all=false: 随机端口映射, 容器内部端口随机映射到主机的端口,不推荐
    • --rm=false 容器停止后自动删除容器, 不能以docker run -d启动的容器
    • -p, --publish=[]:指定端口映射 (主机)宿主端口: 容器端口, 推荐
    • -t --tty=false: 为容器重新分配一个伪输入终端, 与-i 同时使用
    • --name="nginx": 为容器指定个名称
    • -h, --hostname="lao": 指定容器的hostname
    • -e, --env=[]: 设置环境变量, 容器中可以使用此环境变量
    • --net="bridge": 指定容器的网络连接类型, 支持bridge/host/none/contaiiner四种
    • --link=[]: 添加链接到另一个容器,不推荐
    • -v, --volume: 绑定一个卷
    • --privileged=false: 指定容器是否为特权容器, 特权容器拥有所有的capabilities
    • --restart=no: 指定容器停止后的重启策略
      • no: 不重启
      • on-failure: 故障退出时重启
      • always: 容器退出时总是重启
  • docker create

    • 与docker run 大致相同
  • docker start

  • docker stop

  • docker rm

  • docker restart

  • docker exec -it 2a32 /bin/bash

    • /bin/bash 在没有bash命令的linux系统里是sh
  • docker update --restart always tomcat9 有些命令不支持, rm后重新run

  • docker kill tomcat9.2

容器操作命令

docker [ps|inspect|top|attach|wait|export|port|rename|stat]
  • docker inspect tomcat:9

    docker inspect tomcat:9

  • docker stop 8d

  • docker rm 8d

    • -f 通过SIGKILL信号强制删除
    • -l 移除网络连接
    • -v 删除与容器关联的卷
  • docker ps -a -q

    有七种状态

    • created
    • restarting
    • running
    • removing
    • paused
    • exited
    • dead

    实用命令

    docker stop $(docker ps -qa)
    docker rm $(docker ps -aq)
    docker rmi $(docker images -q)
    

容器rootfs命令

docker [commit|cp|diff]

镜像仓库

docker [login|pull|push|search]
  • docker pull

    docker pull tomcat:9.0.39-jdk15
    

    docker 比较占用磁盘空间, 主要是日志问题

  • docker search tomcat

本地镜像管理

docker [build|images|rmi|tag|save|import|load]
  • docker save redis: 6.0.9 -o redis.tar

  • docker load -i redis.tar

  • docker tag tomcat:9 a:1

    此时打上标签, 前缀image ID可能会重复

    如果此时已经有修改后的镜像, 再去tag, 会不做操作

  • docker rmi tomcat:9

    这里如果有多个相同前缀image ID , 这时候去删除也不会删除

  • docker image prune

    -a 删除所有没有用的镜像, 不仅仅是临时文件

    -f 强制删除镜像文件

容器资源管理

docker [volume|network]

系统日志信息

docker [events|history|logs]
  • docker history tomcat:9
  • docker logs -f
  • docker logs --tail 10 ---since="" mysql

官网