docker容器
1:什么是容器幔嗦?
容器就是在隔離的環(huán)境運行的一個進程虎敦,如果進程停止游岳,容器就會銷毀。
隔離的環(huán)境擁有自己的系統(tǒng)文件其徙,ip地址胚迫,主機名等
kvm虛擬機,linux唾那,系統(tǒng)文件
程序:代碼访锻,命令
進程:正在運行的程序
2:容器和虛擬化的區(qū)別
linux容器技術,容器虛擬化和kvm虛擬化的區(qū)別
kvm虛擬化: 需要硬件的支持闹获,需要模擬硬件期犬,
可以運行不同的操作系統(tǒng),啟動時間分鐘級(開機啟動流程)
linux開機啟動流程:
bios開機硬件自檢
根據bios設置的優(yōu)先啟動項boot? 網卡 硬盤 u盤 光驅
讀取mbr引導 2T? UEFI(gpt分區(qū))? ? mbr硬盤分區(qū)信息避诽,內核加載路徑
加載內核
啟動第一個進程/sbin/init? systemd
系統(tǒng)初始化完成
運行服務
龟虎。。沙庐。
容器啟動流程:
共用宿主機內核:
第一個進程鲤妥,服務nginx,httpd拱雏,mysql
容器:共用宿主機內核棉安,容器的第一個進程直接運行服務,輕量級铸抑,損耗少贡耽,啟動快,性能高
容器虛擬化:不需要硬件的支持鹊汛。不需要模擬硬件蒲赂,共用宿主機的內核,啟動時間秒級(沒有開機啟動流程)
總結:
(1)與宿主機使用同一個內核柒昏,性能損耗械手妗;
(2)不需要指令級模擬职祷;
(3)容器可以在CPU核心的本地運行指令氏涩,不需要任何專門的解釋機制届囚;
(4)避免了準虛擬化和系統(tǒng)調用替換中的復雜性;
(5)輕量級隔離是尖,在隔離的同時還提供共享機制意系,以實現容器與宿主機的資源共享。
3:容器技術的發(fā)展過程:
1):chroot技術饺汹,新建一個子系統(tǒng)(擁有自己完整的系統(tǒng)文件)
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
chang root
作業(yè)1:使用chroot監(jiān)獄限制SSH用戶訪問指定目錄和使用指定命令
https://linux.cn/article-8313-1.html
ls
2):linux容器(lxc)? linux container(namespaces 命名空間 隔離環(huán)境 及cgroups 資源限制)
cgroups? 限制一個進程能夠使用的資源蛔添。cpu,內存兜辞,硬盤io
kvm虛擬機:資源限制(1c 1G 20G)
##需要使用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=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0
##啟動cgroup
systemctl start cgconfig.service
##啟動lxc
systemctl start lxc.service
##創(chuàng)建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
3):docker容器
centos7.4? 2G? 10.0.0.11? docker01? ? host解析
centos7.4? 2G? 10.0.0.12? docker02? ? host解析
Docker是通過進程虛擬化技術(namespaces及cgroups cpu迎瞧、內存、磁盤io等)來提供容器的資源隔離與安全保障等逸吵。由于Docker通過操作系統(tǒng)層的虛擬化實現隔離凶硅,所以Docker容器在運行時,不需要類似虛擬機(VM)額外的操作系統(tǒng)開銷扫皱,提高資源利用率足绅。
namespace? 資源隔離
cgroups? ? 進程的資源限制
kvm? ? ? 虛擬磁盤文件,資源隔離
kvm? ? ? 資源限制韩脑,--cpus --memory
docker 初期把lxc二次開發(fā)氢妈,libcontainer
top
htop
docker的主要目標是"Build,Ship and Run any App,Angwhere",構建,運輸段多,處處運行
部署服務首量,環(huán)境問題
一次構建,處處運行
docker是一種軟件的打包技術
構建:做一個docker鏡像
運輸:docker pull
運行:啟動一個容器
每一個容器衩匣,他都有自己的系統(tǒng)文件rootfs.
kvm解決了硬件和操作系統(tǒng)之間的依賴
kvm獨立的虛擬磁盤蕾总,xml配置文件
docker解決了軟件和操作系統(tǒng)環(huán)境之間的依賴粥航,能夠讓獨立服務或應用程序在不同的環(huán)境中琅捏,得到相同的運行結果。
docker鏡像有自己的文件系統(tǒng)递雀。
docker容器是一種輕量級柄延、可移植、自包含的軟件打包技術缀程,使應用程序可以在幾乎任何地方以相同的方式運行搜吧。開發(fā)人員在自己筆記本上創(chuàng)建并測試好的容器,無需任何修改就能夠在生產系統(tǒng)的虛擬機杨凑、物理服務器或公有云主機上運行滤奈。
4:docker的安裝
10.0.0.11:修改主機名和host解析
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
5:docker的主要組成部分
docker是傳統(tǒng)的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(如果要做監(jiān)控)
docker主要組件有:鏡像、容器撩满、倉庫, 網絡蜒程,存儲
啟動容器必須需要一個鏡像绅你,倉庫中只存儲鏡像
容器---鏡像---倉庫
docker初次體驗:
安裝Nginx步驟:
官網下載Nginx源碼包wget?
tar
創(chuàng)建Nginx用戶
編譯安裝
./config....
修改配置文件,
啟動
6:啟動第一個容器
##配置docker鏡像加速
vi /etc/docker/daemon.json
{
? "registry-mirrors": ["https://registry.docker-cn.com"]
}
docker run -d -p 80:80 nginx
run(創(chuàng)建并運行一個容器)
-d 放在后臺
-p 端口映射
nginx docker鏡像的名字
7:docker的鏡像管理
搜索鏡像
docker search
選鏡像的建議:
1昭躺,優(yōu)先考慮官方
2忌锯,stars數量多
獲取鏡像
docker pull(push)
鏡像加速器:阿里云加速器,daocloud加速器领炫,中科大加速器偶垮,Docker 中國官方鏡像加速:https://registry.docker-cn.com
官方pull ? ? docker pull centos:6.8(沒有指定版本,默認會下載最新版)
私有倉庫pull docker pull daocloud.io/huangzhichong/alpine-cn:latest
##配置docker鏡像加速
vi /etc/docker/daemon.json
{
? "registry-mirrors": ["https://registry.docker-cn.com"]
}
查看鏡像列表
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
8:docker的容器管理
docker run -d -p 80:80 nginx:latest?
run(創(chuàng)建并運行一個容器)
-d 放在后臺
-p 端口映射
-v? 源地址(宿主機):目標地址(容器)
nginx docker鏡像的名字
docker run -it --name centos6 centos:6.9 /bin/bash
-it? 分配交互式的終端
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令
啟動容器***
docker run image_name
docker run -it image_name CMD
docker run ==== docker create? + docker start
停止容器
docker stop CONTAINER_ID
殺死容器
docker kill container_name
查看容器列表
? ? docker ps
docker ps –a
進入容器(目的帝洪,調試似舵,排錯)
*** docker exec? (會分配一個新的終端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
? ? docker exec -it? 容器id或容器名字 /bin/bash(/bin/sh)
docker attach(使用同一個終端)
docker attach [OPTIONS] CONTAINER
nsenter(安裝yum install -y util-linux 棄用)
刪除容器
docker rm
批量刪除容器
? ? docker rm -f `docker ps -a -q`
總結:docker容器內的第一個進程(初始命令)必須一直處于前臺運行的狀態(tài)(必須夯住)葱峡,否則這個容器啄枕,就會處于退出狀態(tài)!
業(yè)務在容器中運行:夯住族沃,啟動服務
9:docker容器的網絡訪問(端口映射)
docker0:172.17.0.1? jumpserver:172.17.0.2? nginx:172.17.0.3
指定映射(docker 會自動添加一條iptables規(guī)則來實現端口映射)
-p hostPort:containerPort
-p ip:hostPort:containerPort? 多個容器都想使用80端口
-p ip::containerPort(隨機端口)
-p hostPort:containerPort:udp
-p? 10.0.0.100::53:udp
-p 81:80 –p 443:443 可以指定多個-p
隨機映射
docker run -P (隨機端口)
通過iptables來實現的端口映射
10:docker的數據卷管理
/usr/share/nginx/html
-v? /opt/xiaoniao:/usr/share/nginx/html
持久化
數據卷(文件或目錄)
-v 卷名:/data
-v src(宿主機的目錄):dst(容器的目錄)
數據卷容器
--volumes-from(跟某一個已經存在的容器掛載相同的卷)
基于nginx啟動一個容器频祝,監(jiān)聽80和81,訪問80脆淹,出現nginx默認歡迎首頁常空,訪問81,出現小鳥盖溺。
-p 80:80 -p 81:81 -v? xxx:xxx -v? xxx:xxxx
基于nginx多端口的多站點漓糙。
11:手動將容器保存為鏡像
docker commit 容器id或者容器的名字? 新的鏡像名字[:版本號可選]
1):基于容器制作鏡像
docker run -it centos:6.9
######
yum install httpd
yum install openssh-server
/etc/init.d/sshd start
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
chmod +x /init.sh
2)將容器提交為鏡像
docker commit oldboy centos6-ssh-httpd:v1
3)測試鏡像功能是否可用
手動制作的鏡像,傳輸時間長
鏡像初始命令
制作一個kodexplorer網盤docker鏡像烘嘱。nginx + php-fpm(httpd + php)
12:dockerfile自動構建docker鏡像
類似ansible劇本昆禽,大小幾kb
手動做鏡像:大小幾百M+
dockerfile 支持自定義容器的初始命令
dockerfile主要組成部分:
基礎鏡像信息? ? ? FROM? centos:6.9
制作鏡像操作指令? RUN yum install openssh-server -y
容器啟動時執(zhí)行指令 CMD ["/bin/bash"]
dockerfile常用指令:
FROM 這個鏡像的媽媽是誰?(指定基礎鏡像)
MAINTAINER 告訴別人蝇庭,誰負責養(yǎng)它醉鳖?(指定維護者信息,可以沒有)
LABLE? ? ? 描述哮内,標簽
RUN 你想讓它干啥(在命令前面加上RUN即可)
ADD 給它點創(chuàng)業(yè)資金(會自動解壓tar)? 制作docker基礎的系統(tǒng)鏡像
WORKDIR 我是cd,今天剛化了妝(設置當前工作目錄)
VOLUME 給它一個存放行李的地方(設置卷盗棵,掛載主機目錄)
EXPOSE 它要打開的門是啥(指定對外的端口)(-P 隨機端口)
CMD 奔跑吧,兄弟1狈ⅰ(指定容器啟動后的要干的事情)(容易被替換)
dockerfile其他指令:
COPY 復制文件(不會解壓)rootfs.tar.gz
ENV? 環(huán)境變量
ENTRYPOINT? 容器啟動后執(zhí)行的命令(無法被替換纹因,啟容器的時候指定的命令,會被當成參數)
參考其他的dockerfile
官方dockerfile或者時速云鏡像廣場
13:docker鏡像的分層(kvm 鏈接克隆琳拨,寫時復制的特性)
鏡像分層的好處:復用,節(jié)省磁盤空間瞭恰,相同的內容只需加載一份到內存。
修改dockerfile之后狱庇,再次構建速度快
14:.容器間的互聯(lián)(--link 是單方向的>贰J抢巍!)
docker run -d -p 80:80 nginx
docker run -it --link quirky_brown:web01 qstack/centos-ssh /bin/bash
ping web01
lb? ---> nginx? 172.17.0.4 --> db01? 172.17.0.3
? ? ? ? ? ? ? ? ? ? ? ? ? --> nfs01? 172.17.0.2
使用docker運行zabbix-server
docker run --name mysql-server -t \
? ? ? -e MYSQL_DATABASE="zabbix" \
? ? ? -e MYSQL_USER="zabbix" \
? ? ? -e MYSQL_PASSWORD="zabbix_pwd" \
? ? ? -e MYSQL_ROOT_PASSWORD="root_pwd" \
? ? ? -d mysql:5.7 \
? ? ? --character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-java-gateway -t \
? ? ? -d zabbix/zabbix-java-gateway:latest
docker run --name zabbix-server-mysql -t \
? ? ? -e DB_SERVER_HOST="mysql-server" \
? ? ? -e MYSQL_DATABASE="zabbix" \
? ? ? -e MYSQL_USER="zabbix" \
? ? ? -e MYSQL_PASSWORD="zabbix_pwd" \
? ? ? -e MYSQL_ROOT_PASSWORD="root_pwd" \
? ? ? -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
? ? ? --link mysql-server:mysql \
? ? ? --link zabbix-java-gateway:zabbix-java-gateway \
? ? ? -p 10051:10051 \
? ? ? -d zabbix/zabbix-server-mysql:latest
docker run --name zabbix-web-nginx-mysql -t \
? ? ? -e DB_SERVER_HOST="mysql-server" \
? ? ? -e MYSQL_DATABASE="zabbix" \
? ? ? -e MYSQL_USER="zabbix" \
? ? ? -e MYSQL_PASSWORD="zabbix_pwd" \
? ? ? -e MYSQL_ROOT_PASSWORD="root_pwd" \
? ? ? --link mysql-server:mysql \
? ? ? --link zabbix-server-mysql:zabbix-server \
? ? ? -p 80:80 \
? ? ? -d zabbix/zabbix-web-nginx-mysql:latest
監(jiān)控報警:微信報警陕截,alpine ?
yum 安裝zabbix好使
16:docker registry(私有倉庫)
##普通的registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry? registry
上傳鏡像到私有倉庫:
a:給鏡像打標簽
docker? tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
b:上傳鏡像
docker push 10.0.0.11:5000/centos6-sshd:v3
docker run -d 10.0.0.11:5000/centos6-sshd:v3
如果遇到報錯:
The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
解決方法:
vim? /etc/docker/daemon.json
{
? "insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker
##帶basic認證的registry
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd? -Bbn oldboy 123456? >> /opt/registry-var/auth/htpasswd
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e? "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
17:docker-compose(單機版的容器編排工具)
ansible劇本
yum install -y python2-pip(需要epel源)
pip install docker-compose(默認pypi源在國外)
##pip 加速
##詳細指令
http://www.reibang.com/p/2217cfed29d7
cd my_wordpress/
vi docker-compose.yml
version: '3'
services:
? db:
? ? image: mysql:5.7
? ? volumes:
? ? ? - db_data:/var/lib/mysql
? ? restart: always
? ? environment:
? ? ? MYSQL_ROOT_PASSWORD: somewordpress
? ? ? MYSQL_DATABASE: wordpress
? ? ? MYSQL_USER: wordpress
? ? ? MYSQL_PASSWORD: wordpress
? wordpress:
? ? depends_on:
? ? ? - db
? ? image: wordpress:latest
? ? volumes:
? ? ? - web_data:/var/www/html
? ? ports:
? ? ? - "80:80"
? ? restart: always
? ? environment:
? ? ? WORDPRESS_DB_HOST: db:3306
? ? ? WORDPRESS_DB_USER: wordpress
? ? ? WORDPRESS_DB_PASSWORD: wordpress
volumes:
? ? db_data:
? ? web_data:
#啟動
docker-compose up
#后臺啟動
docker-compose up -d
18:重啟docker服務驳棱,容器全部退出的解決辦法
方法一:docker run? --restart=always
方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json參考
{
"registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
"insecure-registries":["10.0.0.11:5000"],
"live-restore": true
}
19:Docker Machine安裝docker服務
Docker Machine 二進制? 10.0.0.11
10.0.0.12 免密碼登陸? 從docker的官網下載二進制的包,去安裝docker
10.0.0.13 免密碼登陸
ansible:
shell
20:Docker網絡類型
None:不為容器配置任何網絡功能农曲,--net=none
Container:與另一個運行中的容器共享Network Namespace社搅,--net=container:containerID(K8S)
Host:與宿主機共享Network Namespace,--net=host
Bridge:Docker設計的NAT網絡模型
21:Docker跨主機容器之間的通信macvlan
默認一個物理網卡乳规,只有一個物理地址形葬,虛擬多個mac地址
##創(chuàng)建macvlan網絡
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
##設置eth0的網卡為混雜模式
ip link set eth1 promisc on
##創(chuàng)建使用macvlan網絡的容器
docker run -it --network macvlan_1 --ip=10.0.0.200 busybox
作業(yè)1:用PIPEWORK為docker容器配置獨立IP
作業(yè)2:docker跨主機容器間的通信flannel
22:Dcoker跨主機容器通信之overlay
http://www.cnblogs.com/CloudMan6/p/7270551.html
1)準備工作
docker01上:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
設置容器的主機名
consul:kv類型的存儲數據庫(key:value)
docker01、02上:
vim? /etc/docker/daemon.json
{
? "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
? "cluster-store": "consul://10.0.0.13:8500",
? "cluster-advertise": "10.0.0.11:2376"
}
vim /etc/docker/daemon.json
vim /usr/lib/systemd/system/docker.service
systemctl daemon-reload
systemctl restart docker
2)創(chuàng)建overlay網絡
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1
3)啟動容器測試
docker run -it --network ol1 --name oldboy01? busybox /bin/bash
每個容器有兩塊網卡,eth0實現容器間的通訊,eth1實現容器訪問外網
23:docker企業(yè)級鏡像倉庫harbor(vmware 中國團隊)
第一步:安裝docker和docker-compose
第二步:下載harbor-offline-installer-v1.3.0.tgz
第三步:上傳到/opt,并解壓
第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11
harbor_admin_password = 123456
第五步:執(zhí)行install.sh
###k8s的安裝方法
kubernetes 二進制安裝 安裝最新版,步驟繁瑣!!
https://github.com/minminmsn/k8s1.13/blob/master/kubernetes/kubernetes1.13.1%2Betcd3.3.10%2Bflanneld0.10%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2.md
kubeadm 安裝(網絡原因)
https://www.qstack.com.cn/archives/425.html
minikube 安裝(網絡原因)
yum 安裝(最容易 1.5)
go編譯安裝(大神級別)
k8s-master 管理者
kubelet --docker 啟動容器
kubelet --docker
####制作一個只支持sshd服務的鏡像
1):啟動一個容器暮的,并修改
docker run -it -p 1022:22 centos:6.8 /bin/bash
yum install openssh-server -y
echo 'root:123456'|chpasswd
/etc/init.d/sshd start
測試:ssh遠程登錄
2):將修改后的容器笙以,保存為鏡像
docker commit friendly_swartz centos6-ssh
3)測試新鏡像,sshd是否可用
docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D
ssh root@10.0.0.11 -p 1122
####制作了一個支持sshd和httpd雙服務的鏡像
1):啟動一個容器冻辩,并修改
docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D
yum install httpd -y
/etc/init.d/httpd start
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
chmod +x /init.sh
2):將修改后的容器猖腕,保存為鏡像
docker commit 11bf5984784a centos6-httpd
3)測試新鏡像,檢測sshd和httpd是否可用
docker run -d -p 1222:22 -p 80:80 centos6-httpd:latest /init.sh
作業(yè):使用Dockerfile完成kodexplorer網盤項目
課前回顧:
Linux容器是與系統(tǒng)其他部分隔離開的一系列進程恨闪,從另一個系統(tǒng)鏡像rootfs運行倘感,并由該鏡像提供支持進程所需的全部文件。
容器鏡像包含了應用的所有依賴項咙咽,因而在從開發(fā)到測試再到生產的整個過程中老玛,它都具有可移植性和一致性。
1:chroot钧敞,ldd
2:lxc namespace(6大命名空間)和cgroup
3:docker和kvm區(qū)別蜡豹,docker鏡像基礎操作,docker容器日常操作溉苛,commit制作鏡像镜廉,dockfile來自動構建鏡像
####docker私有倉庫registry
1)啟動registry容器
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry? registry
2)修改/etc/docker/daemon.json配置文件
{
? "registry-mirrors": ["https://registry.docker-cn.com"],
? "insecure-registries": ["10.0.0.11:5000"]
}
3)重啟docker服務
systemctl restart docker
4)為鏡像打標簽
docker tag centos:6.8 10.0.0.11:5000/oldboy/centos:6.8
5)push推送鏡像
docker push 10.0.0.11:5000/oldboy/centos:6.8