镜像(image)
1.从远程仓库下载
2.朋友拷贝给你
自己制作一个镜像DockerFile
原理:联合文件系统:UnionFS系统,分层、轻量级并且高性能文件系统,支持文件系统的修改作为一次提交一层层叠加,将不同目录挂在在同一个虚拟文件系统下,镜像可以通过分层来进行继承。特性:一次同时加载多个文件系统,只能看到一个文件系统,联合加载会把隔层文件系统叠加起来,最终文件系统会包含所有的底层文件和目录。底层共用。
黑屏—》系统:bootfs
rootfs:Ubuntu,centos
虚拟机分钟级启动,容器秒级启动
https://hub.docker.com/
容器(container)
通过镜像来创建
仓库(repository)
安装docker
# 系统内核版本
[root@localhost ~]# uname -r
3.10.0-957.1.3.el7.x86_64
# 系统版本
[root@localhost ~]# 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/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
安装
帮助文档:https://docs.docker.com/get-docker/
# 1.卸载旧的版本
$ yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2.需要的安装包
yum install -y yum-utils
①[root@localhost roo]# yum install -y yum-utils
这一步可以yum可能报错,如果报错了,执行下面的语句,没问题这不用执行
[root@localhost roo]# rm -f /var/run/yum.pid
②也可能是网络未连接
ping baidu.com
cd /etc/sysconfig/network-scripts/
vi ifcfg-ens33
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static”
DEFROUTE=“yes”
IPV4_FAILURE_FATAL=“no”
IPV6INIT=“yes”
IPV6_AUTOCONF=“yes”
IPV6_DEFROUTE=“yes”
IPV6_FAILURE_FATAL=“no”
IPV6_ADDR_GEN_MODE=“stable-privacy”
NAME=“ens33”
UUID=“047dc553-2309-4a96-8a63-0c04b33c1a58”
DEVICE=“ens33”
ONBOOT=“yes”
IPADDR=“192.168.93.129”
NETMASK=“255.255.255.0”
GATEWAY=“192.168.93.2”
ZONE=“public”
DNS1=192.168.93.2
systemctl restart network(或 service network restart)
# 3.设置镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum软件包索引: yum makecache fast
# 4.安装docker
yum install docker-ce docker-ce-cli containerd.io
# 5.启动docker
systemctl start docker
# 6. 查看是否安装成功
docker --version
# 7.执行hello-world
docker run hello-world
# 8.查看一下镜像
docker images
# 9.卸载
①、卸载依赖 ce社区版
yum remove docker-ce docker-ce-cli containerd.io
②、删除镜像/容器等,也是docker默认工作路径
rm -rf /var/lib/docker
# 10.阿里云加速,登录阿里云,找到镜像加速地址
#创建个文件
mkdir -p /etc/docker
# 编写配置文件
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://9xj7kbt8.mirror.aliyuncs.com"]
}
EOF
# 重新加载下
systemctl daemon-reload
# 重启下
systemctl restart docker
地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
docker是如何工作的:
Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!
DockerServer接收到Docker-Client的指令,执行这个命令!
docker不须要像虚拟机一样重新加载一个操作系统的内核。OS虚拟化
Docker的常用命令
docker version # 显示 版本信息
docker info # 显示系统信息,包括镜像,容器数量
docker help # 帮助命令
帮助文档地址 :docs.docker.com/engine/reference/commandline
镜像命令
docker images --help
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 12 months ago 13.3kB
#解释
REPOSITORY 镜像仓库源
TAG 镜像标签
IMAGE ID 镜像id
CREATED 镜像创建时间
SIZE 镜像大小
#可选项
-a , --all #列出所有镜像
-q, --quiet #只显示镜像id
- docker search 搜索镜像:hub.docker.com
docker search mysql # 搜索mysql
docker search mysql --filter=STARS=3000 # 过滤,搜索镜像STARS 大于3000的
[root@localhost docker]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 10380 [OK]
mariadb MariaDB is a community-developed fork of MyS… 3848 [OK]
- docker pull 下载镜像
下载镜像 docker pull 镜像名称 [:tag]
[root@localhost docker]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql #不写tag 默认就是latest
a076a628af6f: Pull complete #分层下载,docker image 核心,联合文件系统
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
25b5c6debdaf: Pull complete
43a5816f1617: Pull complete
1a8c919e89bf: Pull complete
9f3cf4bd1a07: Pull complete
80539cea118d: Pull complete
201b3cad54ce: Pull complete
944ba37e1c06: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
[root@localhost docker]# docker pull mysql:5.7
- docker rmi - f 容器id # 删除镜像,【remove image】
删除所有:docker rmi -f $(docker images -aq)
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 a70d36bc331a 2 days ago 449MB
mysql latest c8562eaf9d81 2 days ago 546MB
hello-world latest bf756fb1ae65 12 months ago 13.3kB
[root@localhost docker]# docker rmi -f bf756fb1ae65
Untagged: hello-world:latest
Untagged: hello-world@sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 a70d36bc331a 2 days ago 449MB
mysql latest c8562eaf9d81 2 days ago 546MB
容器命令
新建容器并启动
docker run [可选参数] image
# 参数说明
--name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器
-d 后台运行
-it 使用交互方式运行,
-p 制定容器端口 -p 8080:8080
-p ip:主机端口:容器端口(常用)
-p 容器端口
[root@localhost docker]# docker run -it centos /bin/bash # 启动并进入容器
[root@f6145a808475 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@f6145a808475 /]# exit # 退出centos
exit
[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 a70d36bc331a 2 days ago 449MB
mysql latest c8562eaf9d81 2 days ago 546MB
centos latest 300e315adb2f 6 weeks ago 209MB
[root@localhost docker]# docker ps # 当前正在运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost docker]# docker ps -a # 当前正在运行的容器+历史运行过的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6145a808475 centos "/bin/bash" 2 minutes ago Exited (0) 43 seconds ago naughty_wing
11de857e482a bf756fb1ae65 "/hello" 23 hours ago Exited (0) 23 hours ago recursing_cray
[root@localhost docker]#
列出所有容器
docker ps -a # 当前正在运行的容器+历史运行过的容器
docker ps # 当前正在运行的容器
-n=? #显示最近创建容器
-q # 显示容器运行编号
[root@localhost docker]# docker ps -aq
f6145a808475
11de857e482a
[root@localhost docker]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6145a808475 centos "/bin/bash" 8 minutes ago Exited (0) 7 minutes ago naughty_wing
11de857e482a bf756fb1ae65 "/hello" 23 hours ago Exited (0) 23 hours ago recursing_cray
[root@localhost docker]# docker ps -a -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f6145a808475 centos "/bin/bash" 8 minutes ago Exited (0) 7 minutes ago naughty_wing
[root@localhost docker]#
退出容器
exit # 直接容器停止并退出
Ctrl+P+Q # 容器不停止退出
删除容器
docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rmi 容器id # 删除镜像,不能删除正在运行的镜像,需要先docker stop 容器id
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q |xargs docker rm # 删除所有容器
启动和停止容器的操作
docker start 容器id # 启动容器
docker restart 容器id #重启
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器
常用其他命令
后台启动容器
> docker run -d 镜像名
[root@localhost docker]# docker run -d centos
c0b4c16af1c2475c19e1a7dbb40805cbd5124ef51cc64149ddfce3f21ecd489d
[root@localhost docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
> 常见坑 :docker 容器使用后台运行,必须有一个前台进程,docker发现没有应用,会自动停止
> Nginx,容器启动后,发现没有提供服务,就会立即停止,就没有程序了
查看日志
-tf #显示日志
-- tail number #要显示ride条数
# 显示制定行数的日志
[root@localhost docker]# docker logs -f -t --tail 10 73eaf48a143c
查看容器进程信息
# docker top 容器id
[root@localhost docker]# docker top 73eaf48a143c
UID PID PPID C STIME TTY TIME CMD
root 63937 63915 0 10:14 pts/0 00:00:00 /bin/bash
查看镜像元数据
docker inspect 容器id
[root@localhost docker]# docker inspect 73eaf48a143c
进入当前正在运行的容器
# 命令
docker exec -it 容器id(或者name) bashShell #进入容器后开启一个新的终端,可以在里面操作(常用)
[root@localhost docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
73eaf48a143c centos "/bin/bash" About an hour ago Up About an hour angry_franklin
[root@localhost docker]# docker exec -it 73eaf48a143c /bin/bash
[root@73eaf48a143c /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
方式二:
docker attach 容器id #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机
docker cp 容器id :/home/test.txt /home