赞
踩
一款产品有开发、上线前后两套或者更多环境,每个机器都要部署环境(集群redis、ES、Hadoop…!),配置环境麻烦易出错,且不能跨平台。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils
默认为国外版本
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
推荐使用阿里云,较快速
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io
systemctl start docker
docker version
docker run hello-world
*unable to find image ‘hello-world:latest’ locally ------ 没有找到镜像
Pulling from library/hello-world ------ 下载镜像
Hello from docker ------ 安装成功
docker images
了解:卸载docker
卸载依赖:yum remove docker-ce docker-ce-cli containerd.io
删除资源:rm -rf /var/lib/docker
登录阿里云->工作台->容器镜像服务
配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://wdm6xkay.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker是什么工作的
Docker是一个client-server结构的系统,Docker的守护进程运行在主机上,通过socker客户端访问!
DockerServer接收到 Docker-Client 的指令,就会执行这个命令!
Docker为什么比VM快
1、Docker有着比虚拟机更少的抽象层
2、docker利用的是宿主机的内核,VM用的是Guest Os
新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest Os,而docker是利用宿主机的操作系统,省略了这个复杂的过程。
docker version ----- 显示docker的版本信息
docker info ----- 显示docker的系统信息,包括镜像与容器的数量
docker 命令 --help ----- 万能命令
帮助文档地址:https://docs.docker.com/engine/reference/commandline/cli/
[root@qingzhi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 5 months ago 13.3kB
解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小
可选项
-a, --all 列出所有镜像
-q, --quiet 只显示镜像的ID
[root@qingzhi ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11258 [OK]
mariadb MariaDB Server is a high performing open sou… 4277 [OK]
可选项 --filter 通过收藏来过滤镜像
--filter=STARS=3000 搜索出来就是镜像STARS大于3000的
下载镜像 docker pull 【镜像名】 【:tag】
[root@qingzhi ~]# docker pull mysql Using default tag: latest 如果不写tag。默认就是latest(最新版本) latest: Pulling from library/mysql 33847f680f63: Pull complete 分层下载,docker image的核心 5cb67864e624: Pull complete 1a2b594783f5: Pull complete b30e406dd925: Pull complete 48901e306e4c: Pull complete 603d2b7147fd: Pull complete 802aa684c1c4: Pull complete 715d3c143a06: Pull complete 6978e1b7a511: Pull complete f0d78b0ac1be: Pull complete 35a94d251ed1: Pull complete 36f75719b1a9: Pull complete Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd 签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest 真实地址 [root@qingzhi ~]#
docker pull mysql 等价于 docker pull docker.io/library/mysql:latest
指定版本
[root@qingzhi ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql 33847f680f63: Already exists exists代表该部分已经下载过,不需要重新下载 5cb67864e624: Already exists 1a2b594783f5: Already exists b30e406dd925: Already exists 48901e306e4c: Already exists 603d2b7147fd: Already exists 802aa684c1c4: Already exists 5b5a19178915: Pull complete f9ce7411c6e4: Pull complete f51f6977d9b2: Pull complete aeb6b16ce012: Pull complete Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596 Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7 [root@qingzhi ~]#
docker rmi -f 镜像id ------- 删除指定镜像
docker rmi -f 镜像id 镜像id 镜像id ------ 删除多个镜像
docker rmi -f $(docker images -aq) ----- 删除全部镜像
说明:有了镜像才能创建容器,Linux ,测试下载CentOs镜像
docker pull CentOs
docker run [可选参数] image
--name="name" 容器名字 tomcat01,tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
---- -p ip:主机端口:容器端口
---- -p 主机端口:容器端口 (常用)
---- -p 容器端口
---- 容器端口
-P 随机指定端口
启动进入之后,主机名称发生改变
docker ps -- 列出所有正在运行的容器
docker ps -a -- 列出所有正在运行的容器+历史运行的容器
docker ps -q -- 列出容器
[root@qingzhi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@qingzhi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2898ae33003d centos "/bin/bash" 3 minutes ago Exited (0) About a minute ago crazy_fermat
8952dd8ecf0d d1165f221234 "/hello" 5 hours ago Exited (0) 5 hours ago mystifying_keller
[root@qingzhi ~]# docker ps -aq
2898ae33003d
8952dd8ecf0d
exit —直接停止容器并退出
ctrl + P +Q —容器不停止退出(键盘大写锁定下)
docker rm 容器id -- 删除指定的容器,不能删除正在运行的,如果强制删除 rm -f
docker rm -f $(docker ps -aq) --- 删除所有容器
docker start 容器id -- 启动一个已经停止的容器
docker restart 容器id -- 重启容器
docker stop 容器id -- 停止当前正在运行的容器
docker kill 容器id -- 强制停止当前容器
root@qingzhi ~]# docker run -d centos
7d3c5f418eacd54d054bd8bf864e39967d2e9f6d25b02784246007b9afaacdea
[root@qingzhi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@qingzhi ~]#
后台启动成功后,docker ps发现centos停止了?
--docker容器使用后台运行,就必须有一个前台进程,dcoker如果没有发现应用,就会自动停止。
docker logs
有运行中的容器,没有日志。可编写一段shell脚本以便观察。
[root@qingzhi ~]# docker run -d centos /bin/sh -c "while true;do echo qingzhi;sleep 1;done"
docker top 容器id
[root@qingzhi ~]# docker top 7ea3a50f6d53
UID PID PPID C STIME TTY
root 9319 9285 0 16:45 ?
root 9375 9319 0 16:46 ?
docker inspect 容器id [root@qingzhi ~]# docker inspect 7ea3a50f6d53 [ { "Id": "7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331", "Created": "2021-08-13T08:42:13.862127123Z", "Path": "/bin/sh", "Args": [ "-c", "while true;do echo qingzhi;sleep 1;done" ], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 9319, "ExitCode": 0, "Error": "", "StartedAt": "2021-08-13T08:45:59.983325505Z", "FinishedAt": "2021-08-13T08:43:44.249393264Z" }, "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55", "ResolvConfPath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/resolv.conf", "HostnamePath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/hostname", "HostsPath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/hosts", "LogPath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331-json.log", ……
docker exec -it 容器id /bin/bash --- 方式一
docker attach 容器id ---方式二
区别:方式一进入容器后开启一个新的终端,可以在里面操作(常用)
方式二进入容器正在执行的终端,不会启动新的进程
docker cp 容器id:容器内路径 目的主机路径
当前主机 /home 目录下中只有一个文件,进入容器内,创建文件之后退出
退出后虽容器停止运行,只要容器还在就不影响文件的拷贝。
portainer – docker图形化管理工具,提供一个后台操作面板
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock --privileged=true portainer/portainer
dokcer search nginx --- 搜索nginx
docker pull nginx --- 下载nginx
docker images --- 查看下载是否完成
启动并查看运行
-d 后台运行
--name 给容器命名
-p 宿主机端口,容器内端口
docker run -d --name nginx01 -p 8888:80 nginx
docker ps
curl localhost:8888
-p --- 端口暴露概念
docker exec -it nginx01 /bin/bash -- 进入容器查看配置文件位置
退出 -> 停止
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
es暴露端口较多,十分消耗内存,数据一般需要放置在安全目录。
docker stats --- 查看cpu状态
测试es是否成功开启
启动时增加配置 -e ES_JAVA_OPTS="-Xms128m -Xms512" 限制es最大占用内存
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xms512" elasticsearch:7.6.2
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容、包括代码、运行时-库、环境变量与配置文件。
UnionFS(联合文件系统)
Unios文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来继承、基于基础镜像,可以制作各种具体的应用镜像。
特性:一次同时加载多个系统文件,但从外面来看,只能看到一个文件系统,联合加载会把个各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件与目录。
Docker镜像加载原理
Docker镜像实际是由一层一层的文件系统组成,层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel、bootloader主要是引导加载kernel,linux刚启动时回家再bootfs文件系统,再Docker镜像的最底层是bootfs,这一层与典型的linux/unix系统是一样的,包含voot加载器和内核。档boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,系统也会卸载bootfs。
rootsfs(root file system)在bootfs之上。包含的就是典型Linux系统中的 /dev,/proc/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,如Ubuntu,Centos等。
对于一个精简的os,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。
分层的镜像
下载镜像,观察下载日志输出:
Already exits 代表其他镜像中该层已经下载过,无需下载。
docker image inspect redis:latest -- 查看镜像信息
docker commit -a="作者" -m="提交的描述信息" 容器id 目标镜像名:[tag]
注:部分插图来自网络,如有侵权请联系删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。