docker
C/S架构模式
Docker客户端:
用于和Docker守护进程 (Daemon)建立通信的客户端。Docker客户端只需要向docker服务器或者守护进程发出请求(构建、拉取、启动等指令),服务器或守护进程将完成所有工作,并返回结果
1.橙色流程:执行docker构建指今会根据docker文件构建一个镜像存放于本地主机
2.蓝色流程,执行docker拉取指今会从云端镜像仓库拉取镜像至本地主机,或将本地镜像推送至云端镜像仓库
3.黑色流程:执行docker启动命令会将镜像安装至容器并启动容器
配置本地yum源
进入到/etc/yum.repos.d/
2. 创建备份 mkdir back
3. 把Cent*弄到back里
4. 创建local.repo
``` JAVA
[local]
name=local
gpgcheck=0
enabled=1
baseurl=file:///media/cdrom
```
5. 挂载 mount /dev/sr0 /media/cdrom/
6. 下载yum库 yum makecache
7. 安装http协议 yum -y install httpd
配置阿里云yum仓库
wget -O /etc/yum.repos.d/Centos-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2. 卸载(可选)
```
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
```
3. 安装yum工具
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
4. 更新本地镜像源:
设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
5. yum install -y docker-ce
6. docker -v 查看版本
docker的基本使用
镜像仓库
login 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub logout:登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库Docker Hub pull:从镜像仓库中拉取或者更新指定镜像(-a 拉取所有tagged镜像) push:将本地的镜像上川岛镜像仓库 要先登录到镜像仓库 search:从Docker Hyb查找镜像 (-f <过滤条件>:列出收藏数不小于指定值的镜像。)
拉取docker pull centos 最新的
docker pull centos -a所有的
查看所有镜像docker images
本地镜像管理
镜像管理命令说明
systemctl start docker启动
systemctl status docker查看docker状态
systemctl disable docker关闭
systemctl enable docker开机不自启
docker info查看docker系统信息
docker --help docker的帮助命令
docker images 查看本机镜像
repository 镜像仓库源tag镜像标签image id 镜像id
docker images -a列出本地所有镜像
docker images -q只列出ID
仓库名、标签都是<none>的镜像,俗称虚悬镜像dangling image
docker search --limit 5 redis从Docker Hyb查找镜像显示前五行
docker search mysql --filter=STARS=3000搜索官方仓库的点赞数大于3000
docker search 镜像名称 从官方仓库查找镜像
docker pull 镜像名称:标签 下载镜像
docker push 镜像名称:标签 上 传镜像
docker system df 查看容器镜像数据卷,所占空间
type类型 total 总共的镜像数active正在运行的镜像 size大小 reclaimable可回收
docker rmi:删除本地一个或多个镜像。 (-f:强制删除;)
docker rim -f $(docker images -aq)删除所有镜像
docker save 镜像名称:标签 -o 备份镜像名称.tar 备份镜像为tar包
docker load -i 备份镜像名称 导入备份的镜像文件
docker rmi 镜像名称:标签 删除镜像(必须先删除该镜像启动的所有容器)
docker history 镜像名称:标签 查看镜像的制作历史
docker inspect 镜像名称:标签 查看镜像的详细信息
docker tag 镜像名称:标签 新的镜像名称:新的标签 创建新的镜像名称和标签
build:用于使用 Dockerfile创建镜像。
images:列出本地镜像。 (-a :列出本地所有的镜像)
tag:标记本地镜像,将其归入某一仓库。
history:查看指定镜像的创建历史。
save:将指定镜像保存成 tar 归档文件。(-o:输出到的文件)
load:导入使用 docker save 命令导出的镜像。(-i:指定导入的文件,代替STDIN。)
import:从归档文件中创建镜像。(-c:应用docker 指令创建镜像:)
容器生命周期管理
run:创建一个新的容器并运行一个命令
start/stop/restart:启动一个或多个已经被停止的容器重启容器
stop:停止一个运行中的容器
kill: 杀掉一个运行中的容器。-s:向容器发送一个信号 (docker kill -s KILL mynginx)rm:删除一个或多个容器。-f:通过 SIGKILL 信号强制删除一个运行中的容器pause/unpause:暂停容器中所有的进程/恢复容器中所有的进程create:创建一个新的容器但不启动它
exec:在运行的容器中执行命令
docker run -it(在前台运行) - - name=yunting(把ubuntu命名成yunting) ubuntu /bin/bash (启动一个交互式的bash终端)
-it:选项用于启动一个交互式的容器。-i 选项表示保持标准输入流打开,-t 选项表示为容器分配一个伪终端。
-d: 后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-P: 随机端口映射,大写P -p: 指定端口映射,小写p -p:端口映射(主机端口:容器端口)
退出容器
1.exit容器停止
2 .Ctrl+p+q容器不会停止
docker ps -a 列出所有的容器 不管是现在运行的还是之前运行的 docker ps 运行当前正在运行的容器 docker ps -q 运行容器id docker ps --latest 最近添加的容器信息 docker ps -n2 添加的最新的两天信息
docker restart b7b7f7b08740(容器名称)重新启动
docker rm 容器名称删除
docker ps -a | xargs docker rm -f删除所有容器(前面名输入到后面)
docker rm -f $(docker ps -a)删除所有容器(后面的结果输入到前面)
docker stop 容器ID :停止容器
docker pause 容器ID :暂停容器所有进程
docker unpause 容器ID : 恢复容器所有进程
docker logs 容器ID :查看容器日志
docker logs -f 容器ID :跟踪日志输出
docker logs --tail 10 容器ID : 显示日志的条数10条
docker top 容器ID :查看容器内运行的进程
docker inspect 容器ID 查看容器详细的基本信息
docker events 用于显示 docker守护进程生成的实时事件流
docker events --since=2h ago 可以过滤出在特定时间之后发生的事件
docker stats用来显示当前正在运行的所有容器的资源使用情况
docker events --filter event=container 过滤想要显示容器事件
进入容器方式 1.docker exec -it +容器id(3c8856e6ab7d) /bin/bash 在容器中打开新的终端 用exit退出 不会导致容器的停止 2.docker attach +容器id(3c8856e6ab7d)在容器中打开新的终端 用exit退出会导致容器的停止
docker export 容器ID >abc.tar.gz导出容器内容将作为一个tar归档文件
cat abc.tar.gz | docker import - yunting/ubuntu:3.7导入
docker镜像层都是只读的,容器层可写的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层通常称为容器层。容器层之下都叫镜像层,所有对容器的改动,都只会发生在容器层,容器层下面的所有镜像层都是只读的
docker commit(生成镜像) -m="add vim cmd" -a="yunting" (作者)+容器id(58238869fc4f )ate/myubuntu:1.1(提交的描述信息)
docker commit -m ="add vim cmd" -a="wang" 5a214d77f5d7 ate/myubuntu
apt-get -y install vim安装vim
apt-get update更新包
本地镜像发布到阿里云
登录阿里云,搜索容器镜像服务,点击个人实例
先创建命名空间
然后创建镜像仓库,仓库类型选择公开
点击创建好的仓库会显示代码
第一步. 登录阿里云Docker Registry
docker login --username=aliyun8849270071 registry.cn-hangzhou.aliyuncs.com
第二步将镜像推送到Registry
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/lizhitao1/zy:[镜像版本号]$ docker push registry.cn-hangzhou.aliyuncs.com/lizhitao1/zy:[镜像版本号]
第三步从Registry拉取到本地
docker pull registry.cn-hangzhou.aliyuncs.com/lizhitao1/zy:[镜像版本号]
在docker创建一个mysql数据库
docker run -id -p 3307:3306 --name=mysql01 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。 -v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。 -v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。 -v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。 -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
yum update -y 用于更新系统中的所有已安装的软件包到最新版本
yum install -y openssh-server安装ssh服务器
echo ‘root:password’ | chpasswd 指定一个root账户密码改为password
chpasswd是修改的指令
ssh-keygen -A 获取ssh密钥ssh-keygen: generating new host keys: RSA1 DSA vi /etc/ssh/sshd_config PermitRootLogin yes PasswordAuthentication yes 这两个文件是yes /usr/sbin/sshd 当安装并启动了ssh服务器后,把这个文件将作为ssh守护进程的主要执行程序,负责监听ssh客户端的连接请求,并提供远程登录和安全文件传输功能,如果在终端运行这条命令,没有看到任何错误或提示信息,就意味着ssh服务已经在后台运行 ps aux | grep sshd 检查sshd是否启动 显示所有与ssh相关的进程
数据卷
就是目录和文件存在于一个或多个容器中,由docker挂载到容器中,数据卷的设计目的是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时删除挂载的数据卷
特点:1、数据卷可以在容器之间共享或重用数据,2、卷中的更改可以实时生效3、数据卷中的更改,不会包含在镜像的更新中,4、数据卷的生命周期一直持续到没有容器使用它为止。
1宿主(主机)和容器之间映射添加容器卷
公式:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1 ubuntu
进入映射目录下面(容器)
cd /tmp/docker_data/
创建一个dockerin.txt的文件
touch dockerin.txt
打开另一个终端,进入到主机目录
cd /tmp/host_data/
ls一下可以显示容器创建的dockerin.txt文件,反之也可以在主机创建文件,也可以在容器中显示
2查看容器卷是否挂载成功
语法:docker inspect 容器id
# 查看容器id docker ps -a # 查看是否挂载成功 docker inspect 7c528181c837
如果挂载成功,则inspect命令下的mount字段会有如下显示:
3.卷的继承与共享
语法:docker run -it --privileged=true -volumes-from 父类 --name u2 镜像名
docker run -it --privileged=true --volumes-from u1 --name=u2 ubuntu
通过上述操作可以实现主机和两个容器之间的数据共享,比如在u2新建一个文件,主机和u1均会进行同步。如果我们停掉了u2的容器,然后再宿主机上新建一个文件,则u1会直接同步,那当u2重启之后进入也能查看到该文件。本质上宿主机和多个容器能够共享所有文件,尽管某一容器停止,当其他容器和宿主机进行文件操作时,该容器重启进入后文件还会进行同步和更新
容器和宿主机之间数据共享:
-
docker修改主机同步获得
-
主机修改docker同步获得
-
docker容器stop主机修改,docker容器重启后数据仍然同步