容器就是在隔離的環境運行的一個進程,若是進程中止,容器就會銷燬。隔離的環境擁有本身的系統文件,ip地址,主機名等,kvm虛擬機,linux,系統文件html
程序:代碼,命令
進程:正在運行的程序python
linux容器技術,容器虛擬化和kvm虛擬化的區別linux
kvm虛擬化: 須要硬件的支持,須要模擬硬件,能夠運行不一樣的操做系統,啓動時間分鐘級(開機啓動流程)ios
linux開機啓動流程:nginx
容器:共用宿主機內核,運行服務,損耗少,啓動快,性能高sql
容器虛擬化:不須要硬件的支持。不須要模擬硬件,共用宿主機的內核,啓動時間秒級(沒有開機啓動流程)docker
總結:
一、與宿主機使用同一個內核,性能損耗小;
二、不須要指令級模擬;
三、容器能夠在CPU核心的本地運行指令,不須要任何專門的解釋機制;
四、避免了準虛擬化和系統調用替換中的複雜性;
五、輕量級隔離,在隔離的同時還提供共享機制,以實現容器與宿主機的資源共享。django
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
chang rootjson
宿主機namespace ip地址 主機名 系統文件 進程
子系統namespace,ip地址 主機名 系統文件 進程vim
cgroups 限制一個進程可以使用的資源。cpu,內存,硬盤io
kvm虛擬機:資源限制(1c 1G 20G)
有一個相同函數名字:
. name1 sss.sh === name1.sss() . xxxx.sh === name2.sss()
須要使用epel源
安裝epel源
yum install epel-release -y
編譯epel源配置文件
vi /etc/yum.repos.d/epel.repo [epel] name=Extra Packages for Enterprise Linux 7 - $basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch failovermethod=priority enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [epel-debuginfo] name=Extra Packages for Enterprise Linux 7 - $basearch - Debug baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1 [epel-source] name=Extra Packages for Enterprise Linux 7 - $basearch - Source baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch failovermethod=priority enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 gpgcheck=1
安裝lxc
yum install lxc-* -y yum install libcgroup* -y yum install bridge-utils.x86_64 -y
橋接網卡
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 echo 'TYPE=Ethernet BOOTPROTO=none NAME=eth0 DEVICE=eth0 ONBOOT=yes BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0 [root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 echo 'TYPE=Bridge BOOTPROTO=static NAME=virbr0 DEVICE=virbr0 ONBOOT=yes IPADDR=10.0.0.11 NETMASK=255.255.255.0 GATEWAY=10.0.0.254 DNS1=223.5.5.5' >/etc/sysconfig/network-scripts/ifcfg-virbr0
啓動cgroup
systemctl start cgconfig.service
啓動lxc
systemctl start lxc.service
建立lxc容器
方法1: lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64 方法2: lxc-create -t centos -n test
爲lxc容器設置root密碼:
[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd Changing password for user root. New password: BAD PASSWORD: it is too simplistic/systematic BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully.
爲容器指定ip和網關
vi /var/lib/lxc/centos7/config lxc.network.name = eth0 lxc.network.ipv4 = 10.0.0.111/24 lxc.network.ipv4.gateway = 10.0.0.254
啓動容器
lxc-start -n centos7
Docker是經過內核虛擬化技術(namespaces及cgroups cpu、內存、磁盤io等)來提供容器的資源隔離與安全保障等。因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機(VM)額外的操做系統開銷,提升資源利用率
namespace 資源隔離
cgroups 進程的資源限制
kvm 虛擬磁盤文件,資源隔離
kvm 資源限制,--cpus --memory
docker 初期把lxc二次開發,libcontainer
docker的主要目標是"Build,Ship and Run any App,Angwhere",構建,運輸,到處運行
部署服務,環境問題
一次構建,到處運行
docker是一種軟件的打包技術
構建:作一個docker鏡像
運輸:docker pull
運行:啓動一個容器
每個容器,他都有本身的系統文件rootfs.
kvm解決了硬件和操做系統之間的依賴
kvm獨立的虛擬磁盤,xml配置文件
docker解決了軟件和操做系統環境之間的依賴,可以讓獨立服務或應用程序在不一樣的環境中,獲得相同的運行結果。
docker鏡像有本身的文件系統。
docker容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序能夠在幾乎任何地方以相同的方式運行。開發人員在本身筆記本上建立並測試好的容器,無需任何修改就可以在生產系統的虛擬機、物理服務器或公有云主機上運行。
rm -fr /etc/yum.repos.d/local.repo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo yum install docker-ce -y
docker是傳統的CS架構分爲docker client和docker server,像Mysql同樣
安裝成功後可查看版本 命令:docker version [root@controller ~]# docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:10:14 2017 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:12:46 2017 OS/Arch: linux/amd64 Experimental: false
docker info(若是要作監控)
docker主要組件有:鏡像、容器、倉庫, 網絡,存儲
啓動容器必須須要一個鏡像,倉庫中只存儲鏡像 容器---鏡像—倉庫
啓動容器 systemctl start docker 開啓自啓 systemctl enable docker 配置docker鏡像加速 vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] } 開啓一個nginx服務的容器: docker run -d -p 80:80 nginx docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest run(建立並運行一個容器) -d 放在後臺 -p 端口映射 -v 源地址(宿主機):目標地址(容器) nginx docker鏡像的名字 小技巧: 退出容器時使用 ctrl + p,ctrl +q 能夠保證退出容器後 容器不被殺死
啓動一個基礎容器 docker run -it -p 1022:22 centos:6.9 安裝sshd服務 yum install openssh-server -y service sshd start echo '123456'|passwd --stdin root 把安裝好軟件的容器,提交爲鏡像 docker commit 7d40c868114a centos_ssh:v1 測試 docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D
啓動一個基礎容器 docker run -it -p 8080:8080 python:3.6 /bin/bash 容器部署bms項目 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django cd /opt/ wget http://www.qstack.com.cn/bookManageSystem.zip unzip bookManageSystem.zip cd bookManageSystem 替換Debian源 echo 'deb http://mirrors.163.com/debian/ stretch main non-free contrib deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib deb-src http://mirrors.163.com/debian/ stretch main non-free contrib deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list apt-get update apt-get install vim -y vim bookManageSystem/settings.py python manage.py migrate python manage.py runserver 0.0.0.0:8080 把部署好bms項目的容器提交爲鏡像 docker commit 3e3313968bf7 bms:v1 測試 docker run -d -p 8080:8080 bms:v1 python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080
啓動一個基礎容器 docker run -it -p 8085:8080 -p 1024:22 bms:v1 /bin/bash 在容器中安裝部署服務 apt-get install openssh-server service ssh start passwd root 修改配置文件 vim /etc/ssh/sshd_config PermitRootLogin yes service ssh restart 編寫啓動文件 vim /init.sh #!/bin/bash service ssh start python /opt/bookManageSystem/manage.py runserver 0.0.0.0:8080 把部署好bms項目的容器提交爲鏡像 docker commit 6e44ab74fa5c bms_ssh:v4 測試 docker run -d -p 8085:8080 -p 1024:22 bms_ssh:v4 /bin/bash /init.sh 啓動一個基礎容器 docker run -it -p 1022:22 centos:6.9 安裝sshd服務 yum install openssh-server -y service sshd start echo '123456'|passwd --stdin root 把安裝好軟件的容器,提交爲鏡像 docker commit 7d40c868114a centos_ssh:v1 測試 docker run -d -p 1023:22 centos_ssh:v1 /usr/sbin/sshd -D
搜索鏡像
docker search
選鏡像的建議:
獲取鏡像
docker pull(push)
鏡像加速器:阿里雲加速器,daocloud加速器,中科大加速器,Docker 中國官方鏡像加速:https://registry.docker-cn.com
docker pull centos:6.8(沒有指定版本,默認會下載最新版) docker pull daocloud.io/huangzhichong/alpine-cn:latest
vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"] }
docker pull index.tenxcloud.com/tenxcloud/httpd:latest
查看鏡像 docker images docker image ls 刪除鏡像 docker rmi 例子:docker image rm centos:latest 導出鏡像 docker save 例子:docker image save centos > docker-centos7.4.tar.gz 導入鏡像 docker load 例子:docker image load -i docker-centos7.4.tar.gz
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 分配交互式的終端
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令
docker run ==== docker create + docker start
查看容器列表
docker ps
docker ps –a
進入容器(目的,調試,排錯)
*** docker exec (會分配一個新的終端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)
首先建立一個dockerfile文件 寫入內容
at dockerfile FROM python:3.6 ADD bookManageSystem.zip /bookManageSystem.zip RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django RUN unzip /bookManageSystem.zip RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py RUN python /bookManageSystem/manage.py migrate CMD ["python","/bookManageSystem/manage.py","runserver","0.0.0.0:8080"]
下載項目
yum install wget -y wget http://www.qstack.com.cn/bookManageSystem.zip
修改以前的dockerfile文件
FROM python:3.6 ADD bookManageSystem.zip /bookManageSystem.zip RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple django RUN unzip /bookManageSystem.zip RUN sed -i 's#ALLOWED_HOSTS = \[\]#ALLOWED_HOSTS = \["*"\]#g' /bookManageSystem/bookManageSystem/settings.py RUN python /bookManageSystem/manage.py migrate ADD sources.list /etc/apt/sources.list RUN apt-get update RUN apt-get install openssh-server -y RUN service ssh start RUN echo 'root:123456'|chpasswd RUN echo 'PermitRootLogin yes' >>/etc/ssh/sshd_config ADD init.sh /init.sh CMD ["/bin/bash","/init.sh"]
編寫一個執行腳本
[root@docker01 bms_ssh]# cat init.sh #!/bin/bash service ssh start python /bookManageSystem/manage.py runserver 0.0.0.0:8080
最後開啓一個容器
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
docker login 在dockerhub上註冊帳號而且登陸 docker images docker push centos_ssh:v3 docker tag centos_ssh:v3 t29617342/centos_ssh:v3 docker push t29617342/centos_ssh:v3