云计算day04-Docker容器

徐标杆的docker快速入门01
徐标杆的docker快速入门02
KVM和Docker的对比—强哥

1:什么是容器?

容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址,主机名等

kvm虚拟机,linux,系统文件

程序:代码,命令
进程:正在运行的程序

2:容器和虚拟化的区别

linux容器技术,容器虚拟化和kvm虚拟化的区别

kvm虚拟化: 需要硬件的支持,需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)


#linux开机启动流程:
bios开机硬件自检
根据bios设置的优先启动项boot  网卡 硬盘 u盘 光驱
读取mbr引导 2T  UEFI(gpt分区)    mbr硬盘分区信息,内核加载路径, 
加载内核
启动第一个进程/sbin/init  systemd
系统初始化完成
运行服务(nginx,httpd,mysql)


#容器启动流程:
共用宿主机内核:
第一个进程直接启动服务(nginx,httpd,mysql)

容器和虚拟机的区别:
容器:共用宿主机内核,轻量级,损耗少,启动快,性能高,只能运行在linux系统上
虚拟机:需要硬件的支持,需要模拟硬件,需要走开机启动流程,可以运行不同的操作系统

容器是linux内核独有的技术

性能好,速度快,损耗少 ,秒级启动,只能在linux上运行

3:容器技术的发展过程:

chroot技术

参考资料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
作业1:使用chroot监狱限制SSH用户访问指定目录和使用指定命令(cp,ls)
https://linux.cn/article-8313-1.html
ls

4. docker安装

需要的软件包下载链接: 提取码: gtsg

wget http://192.168.37.202/linux59/docker_rpm.tar.gz
echo "192.168.37.202  mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
ls
tar xf docker_rpm.tar.gz 
ls
cd docker_rpm/
yum localinstall *.rpm -y
docker version 
systemctl start docker
systemctl enable docker
docker version 

4.1 在docker上装一个nginx

软件包下载链接: 提取码: mnsw

wget http://192.168.37.202/linux59/docker_nginx1.15.tar.gz
ls
docker load -i docker_nginx1.15.tar.gz 
docker run -d -p 80:80 nginx

docker run -d -p 80:80 nginx
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
nginx docker镜像的名字

4.2 docker的镜像管理

搜索镜像:
docker search
[root@docker01 ~]# docker search  centos
[root@docker01 ~]# docker search  nginx

官方docker镜像下载地址
hub.docker.com

4.3 拉取镜像

获取镜像
​	docker pull(push)

[root@docker01 ~]# docker pull busybox
[root@docker01 ~]# docker pull busybox:1.29

4.4 查看镜像

[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
nginx               latest              be1f31be9a87        11 months ago       109MB

4.5 删除镜像

扩展命令:删除未使用的映像
docker image prune
    
[root@docker01 ~]# docker image rm busybox:1.29 
[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
nginx               latest              be1f31be9a87        11 months ago       109MB

4.6 导出镜像

[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
nginx               latest              be1f31be9a87        11 months ago       109MB

[root@docker01 ~]# docker image save -o docker_busybox1.29.tar.gz busybox:1.29 

[root@docker01 ~]# ll
total 205572
-rw-------. 1 root root      1392 Apr 19 12:22 anaconda-ks.cfg
-rw-------  1 root root   1378816 Sep  5 12:08 docker_busybox1.29.tar.gz

4.7 导入镜像

[root@docker01 ~]# docker image  load -i docker_busybox1.29.tar.gz 
23bc2b70b201: Loading layer   1.37MB/1.37MB
Loaded image: busybox:1.29

[root@docker01 ~]# docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              19485c79a9bb        9 hours ago         1.22MB
busybox             1.29                758ec7f3a1ee        8 months ago        1.15MB
nginx               latest              be1f31be9a87        11 months ago       109MB

4.8 导入需要用到的镜像

导入镜像的下载链接: 提取码: db3x

[root@docker01 ~]# ll
-rw-r--r--  1 root root   5853184 Sep  5 12:15 docker_alpine.tar.gz
-rw-r--r--  1 root root   1424896 Sep  5 12:15 docker_busybox.tar.gz
-rw-r--r--  1 root root 202872320 Sep  5 12:16 docker_centos6.9.tar.gz
-rw-r--r--  1 root root  74210304 Sep  5 12:15 docker_k8s_dns.tar.gz


[root@docker01 ~]# for i in `find /root/* -type f -name "docker*"`;do docker image load -i $i;done

[root@docker01 ~]# docker image ls

5. docker的容器管理

*** docker run -d -p 80:80 nginx:latest  
run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-v  源地址(宿主机):目标地址(容器)
​
nginx docker镜像的名字
​
docker run -it --name centos6 centos:6.9 /bin/bash
-it   分配交互式的终端interactive tty
--name 指定容器的名字
/bin/sh覆盖容器的初始命令
​
运行容器***
    docker run image_name   
​
    docker run ==== docker create  + docker start
启动容器
    docker start
停止容器
    docker stop CONTAINER_ID
杀死容器
    docker kill container_name
查看容器列表
    docker ps(-a -l  -q <--no-trunc 全部显示>)
查看容器的日志
	docker logs <容器名>
​
进入正在运行的容器(目的,调试,排错)
*** docker exec  (会分配一个新的终端tty)
        docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
​
    docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)   
    docker attach(使用同一个终端)  偷偷离开的快捷键ctrl+p,ctrl+q
        docker attach [OPTIONS] CONTAINER
    nsenter(安装yum install -y util-linux 弃用)
​
删除容器
    docker container rm <centos6>
批量删除容器
    docker rm -f `docker ps -a -q`

总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

业务在容器中运行:初始命令,夯住,启动服务

6. docker容器的网络访问(端口映射)

docker0:172.17.0.1   jumpserver:172.17.0.2   nginx:172.17.0.3

指定映射(docker 会自动添加一条iptables规则来实现端口映射)
​	-p hostPort:containerPort
​	-p ip:hostPort:containerPort  多个容器都想使用8080端口
​	-p ip::containerPort(随机端口)
​	-p hostPort:containerPort/udp
​	-p  10.0.0.100::53/udp   使用宿主机的10.0.0.100这个ip地址的随机端口的udp协议映射容器的udp53端口
​	-p 81:80 –p 443:443 可以指定多个-p

随机映射
​	docker run -P (随机端口)

通过iptables来实现的端口映射

7. docker的数据卷管理

/usr/share/nginx/html

-v  /opt/xiaoniao:/usr/share/nginx/html

持久化
数据卷(文件或目录)
​	-v 卷名:/data (第一次卷是空,会容器的数据复制到卷中,如果卷里面有数据,把卷数据的挂载到容器中)
​	-v src(宿主机的目录):dst(容器的目录)
数据卷容器
​	--volumes-from(跟某一个已经存在的容器挂载相同的卷)
​

7.1 小鸟飞飞飞_基础版练习

小游戏软件包下载链接 提取码: jyqy

第一种方法:
执行下面操作:小游戏的软件包下载后上传后将代码放到容器中

docker run -d -p 80:80 nginx:latest 
docker exec -it <ID_当前一台容器可tab键补全名字> /bin/bash
cd /opt/
mkdir xiaoniao
cd xiaoniao/
wget http://192.168.37.202/linux59/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip 
ls
cd ..
docker container cp xiaoniao <容器名字或_ID>:/usr/share/nginx/html

进入到nginx容器中查看站点目录:
docker exec -it <容器名字或_ID> /bin/bash
cd /usr/share/nginx/html/
ls xiaoniao/

第二种方法:
批量删除掉容器,用容器的数据复制方法把代码放到容器中:
最后接的是nginx的镜像,需提前上传好

docker container rm  -f  `docker ps -a -q`
docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest

第三种方法
删除容器,没有根目录开始的就代表的是创建一个卷

[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -v xiaoniao:/usr/share/nginx/html nginx:latest
[root@docker01 opt]# docker volume ls	#卷的资源查看方式
DRIVER              VOLUME NAME
local               xiaoniao

查看卷的详细信息
[root@docker01 opt]# docker volume inspect xiaoniao 
[
    {
        "CreatedAt": "2019-09-05T20:11:26+08:00",	创建时间
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/xiaoniao/_data",	挂载点
        "Name": "xiaoniao",
        "Options": null,
        "Scope": "local"
    }
]
[root@docker01 opt]# cd /var/lib/docker/volumes/xiaoniao/_data
[root@docker01 _data]# ls
50x.html  index.html
[root@docker01 _data]# echo '123456ABCDEFG' >index.html 

如果卷里面有数据,把卷数据的挂载到容器中
再次清除容器,并创建新容器

[root@docker01 _data]# ls
50x.html  index.html
[root@docker01 _data]# docker container rm -f `docker ps -a -q`

内容没有改变,还是之前的数据

修改标题名字



7.2 小鸟飞飞飞_加强版练习

基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx
基于nginx多端口的多站点。

第一种方法:宿主机上修改
#宿主机上添加一个nginx配置文件xiaoniao.conf,端口为81,站点目录为/opt
#记得打开nginx配置文件中的 include调用
#检查语法后重启nginx,查看80和81端口是否启动

[root@docker01 conf.d]# cat /etc/nginx/conf.d/xiaoniao.conf
server {
        listen       81;
        server_name  _;
        root         /opt;
        index index.html index.htm;
}
[root@docker01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@docker01 conf.d]# systemctl restart nginx
[root@docker01 conf.d]# netstat -lntup|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      19770/nginx: master 
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      19770/nginx: master 



#删除旧容器,杀死当前nginx进程
#创建新容器,将小鸟飞飞飞的nginx配置文件复制到容器的nginx配置文件下

[root@docker01 opt]# pkill -9 nginx	
[root@docker01 opt]# docker container rm -f `docker ps -a -q`	
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /opt/xiaoniao:/opt nginx:latest

10.0.0.11:80
10.0.0.11:81

第二种方法:进入容器修改
#创建新容器,把代码复制到容器中后 进入容器

[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
[root@docker01 opt]# docker exec  -it silly_napier /bin/bash


#在容器中生成xiaoniao.conf的nginx配置文件
echo 'server {
        listen       81;
        server_name  _;
        root         /opt;
        index index.html index.htm;
}' >/etc/nginx/conf.d/xiaoniao.conf

root@cde61c762776:/etc/nginx/conf.d# ls
default.conf  xiaoniao.conf

#退出容器在宿主机上重启nginx容器 浏览器访问查看是否成功
[root@docker01 opt]# docker restart silly_napier
silly_napier

第三种方法:在容器中使用apt-get工具下载vim工具

Debian系统优化源的链接

#删除旧容器,创建新的nginx容器,把代码复制到容器中,并进入容器

[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
[root@docker01 opt]# docker exec -it magical_engelbart /bin/bash
root@70e72068d2d0:/# 


#查看容器的版本—Debian,和当前的源的命令

root@70e72068d2d0:/# cat /etc/os-release 
root@70e72068d2d0:/# cat /etc/apt/sources.list


#执行下面的命令,优化Debian的源
root@70e72068d2d0:/# echo 'deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list


#更新缓存
root@70e72068d2d0:/# apt-get update


#使用apt-get下载 vim
root@70e72068d2d0:/# apt-get install vim -y


#添加xiaoniao.conf的配置文件
root@70e72068d2d0:/# vim /etc/nginx/conf.d/xiaoniao.conf
server {
        listen       81;
        server_name  _;
        root         /opt;
        index index.html index.htm;
}

#和之前的步骤相同,退出容器,在宿主机上重启nginx容器 
#浏览器访问查看是否成功
[root@docker01 opt]# docker restart silly_napier
silly_napier


8. apt-get 常用的命令

apt-cache search packagename 搜索包
apt-cache show packagename 获取包的相关信息,如说明、大小、版本等
apt-get install packagename 安装包
apt-get install packagename --reinstall 重新安装包
apt-get -f install 修复安装”-f = –fix-missing”
apt-get remove packagename 删除包
apt-get remove packagename --purge 删除包,包括删除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安装的包
apt-get dist-upgrade 升级系统
apt-get dselect-upgrade 使用 dselect 升级
apt-cache depends packagename 了解使用依赖
apt-cache rdepends packagename 是查看该包被哪些包依赖
apt-get build-dep packagename 安装相关的编译环境
apt-get source packagename 下载该包的源代码
apt-get clean 清理无用的包
apt-get autoclean 清理无用的包
apt-get check 检查是否有损坏的依赖

9. Debian操作系统常用命令

资料链接

有些需要下载
apt-get install <软件名> -y

iproute		# ip addr
wget		# 下载软件
curl		# curl工具
ethtool		# 查看网卡状态

一、通用命令: 1. date :print or set the system date and time
	2. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z 等)
	3. passwd: print or set the system date and time (passwd -h 查看)
	4. logout, login: 登录 shell 的登录和注销命令
	5. pwd: print or set the system date and time
	6. more, less, head tail: 显示或部分显示文件内容.
	7. lp/lpstat/cancel, lpr/lpq/lprm: 打印文件.
	8. 更改文件权限: chmod u+x...
	9. 删除非空目录:rm -fr dir
	10.拷贝目录: cp -R dir
	
二、ubuntu 常用命令:
1. dpkg: package manager for Debian
	* 安装: dpkg -i package
	* 卸载: dpkg -r package
	* 卸载并删除配置文件: dpkg -P |--purge package
	* 如果安装一个包时。说依赖某些库。可以先 #apt-get install somelib...
	* 查看软件包安装内容 :dpkg -L package
	* 另外 dpkg 还有 dselect 和 aptitude 两个 frontend.

2. apt
	* 安装: apt-get install packs
	* apt-get update : 更新源
	* apt-get upgrade: 升级系统。
	* apt-get dist-upgrade: 智能升级。安装新软件包,删除废弃的软件包
	* apt-get -f install : -f == --fix broken 修复依赖
	* apt-get autoremove: 自动删除无用的软件
	* apt-get remove packages :删除软件
	* apt-get remove package --purge 删除包并清除配置文件
	* 清除所以删除包的残余配置文件: dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P
	* 安装软件时候包的临时存放目录 : /var/cache/apt/archives
	* 清除该目录: apt-get clean
	* 清除该目录的旧版本的软件缓存: apt-get autoclean
	* 查询软件 some 的依赖包: apt-cache depends some
	* 查询软件 some 被哪些包依赖: apt-get rdepends some
	* 搜索软件: apt-cache search name|regexp
	* 查看一个软件的编译依赖库: apt-cache showsrc packagename|grep Build-Depends
	* 下载软件的源代码 : apt-get source packagename (注: sources.list 中应该有 deb-src 源)
	* 安装软件包源码的同时, 安装其编译环境 :apt-get build-dep packagename (有 deb-src 源)
	* 如何将本地光盘加入安装源列表: apt-cdrom add

3. 系统命令:
	* 查看内核版本: uname -a
	* 查看 ubuntu 版本: cat /etc/issue * 查看网卡状态 : ethtool eth0
	* 查看内存,cpu 的信息: cat /proc/meminfo ; cat /proc/cpuinfo
	(/proc 下面的有很多系统信息)
	* 打印文件系统空间使用情况: df -h
	* 查看硬盘分区情况: fdisk -l
	* 产看文件大小: du -h filename;
	* 查看目录大小: du -hs dirname ; du -h dirname 是查看目录下所有文件的大小
	* 查看内存的使用: free -m|-g|-k
	* 查看进程: ps -e 或 ps -aux -->显示用户
	* 杀掉进程: kill pid
	* 强制杀掉: killall -9 processname

4. 网络相关:
	* 配置 ADSL: sudo pppoeconf
	* ADSL 手工拨号: sudo pon dsl-provider
	* 激活 ADSL : sudo /etc/ppp/pppoe_on_boot
	* 断开 ADSL: sudo poff 
	* 根据 IP 查网卡地址: arping IP 地址
	* 产看本地网络信息(包括 ip 等): ifconfig | ifconfig eth0
	* 查看路由信息: netstat -r
	* 关闭网卡: sudo ifconfig eth0 down
	* 启用网卡: sudo ifconfig eth0 up
	* 添加一个服务: sudo update-rc.d 服务名 defaults 99
	* 删除一个服务: sudo update-rc.d 服务名 remove
	* 临时重启一个服务: /etc/init.d/服务名 restart
	* 临时关闭一个服务: /etc/init.d/服务名 stop
	* 临时启动一个服务: /etc/init.d/服务名 start
	* 控制台下显示中文: sudo apt-get install zhcon
	* 查找某个文件: whereis filename 或 find 目录 -name 文件名
	*通过 ssh 传输文件
	scp -rp /path/filename username@remoteIP:/path #将本地文件拷贝到服务器上
	scp -rp username@remoteIP:/path/filename /path #将远程文件从服务器下载到本地

5. 压缩:
	*解压缩 a.tar.gz
	#tar zxvf a.tar.gz
	*解压缩 a.tar.bz2 #tar jxvf a.tar.bz2
	*压缩 aaa bbb 目录为 xxx.tar.gz
	#tar zcvf xxx.tar.gz aaa bbb
	*压缩 aaa bbb 目录为 xxx.tar.bz2
	#tar jcvf xxx.tar.bz2 aaa bbb

6. Nautilus:
	特殊 URI 地址
	* computer:/// - 全部挂载的设备和网络
	* network:/// - 浏览可用的网络
	* burn:/// - 一个刻录 CDs/DVDs 的数据虚拟目录
	* smb:/// - 可用的 windows/samba 网络资源
	* x-nautilus-desktop:/// - 桌面项目和图标
	* file:/// - 本地文件
	* trash:/// - 本地回收站目录
	* ftp:// - FTP 文件夹
	* ssh:// - SSH 文件夹
	* fonts:/// - 字体文件夹,可将字体文件拖到此处以完成安装
	* themes:/// - 系统主题文件夹
	* 显示隐藏文件: Ctrl+h
	* 显示地址栏: Ctrl+l
	* 查看已安装字体: 在 nautilus 的地址栏里输入”fonts:///“,就可以查看本机所有的 fonts`	
	
Vi Etc/network/interfaces · 在 Debian 及其衍生版本中,hostname 都可以通过一下方式修改。众所周知,Linux 的一切都
是存在于文件当中的,事实上 UNIX 是这种哲学的创立者。Debian 中 hostname 存在于以下文
件。
/etc/hostname

10.作业挑战-搭建Ghost博客系统

在这里插入图片描述
资料链接
https://iiong.com/gost-blog-install-notes/
https://blog.csdn.net/qq_35974759/article/details/84858358

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值