特性 |
容器 |
虛擬機 |
啟動 |
秒級 |
分鍾級 |
硬盤使用 |
一般為 MB |
一般為 GB |
性能 |
接近原生 |
弱 |
系統支持量 |
單機支持上千個容器 |
一般幾十個 |
容器三大基本概念 鏡像 image 容器 container 倉庫 repository
docker整個生命周期就是這三個概念。
安裝docker
1.卸載舊版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 2.設置存儲庫 sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
sudo yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安裝docker社區版 sudo yum install docker-ce 4.啟動關閉docker systemctl start docker
docker 鏡像加速
#一條命令加速 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
docker基礎命令注釋
[root@docker ~]# docker --help Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ --help | -v | --version ] A self-sufficient runtime for containers. Options: --config=~/.docker Location of client config files #客戶端配置文件的位置 -D, --debug=false Enable debug mode #啟用Debug調試模式 -H, --host=[] Daemon socket(s) to connect to #守護進程的套接字(Socket)連接 -h, --help=false Print usage #打印使用 -l, --log-level=info Set the logging level #設置日志級別 --tls=false Use TLS; implied by--tlsverify # --tlscacert=~/.docker/ca.pem Trust certs signed only by this CA #信任證書簽名CA --tlscert=~/.docker/cert.pem Path to TLS certificate file #TLS證書文件路徑 --tlskey=~/.docker/key.pem Path to TLS key file #TLS密鑰文件路徑 --tlsverify=false Use TLS and verify the remote #使用TLS驗證遠程 -v, --version=false Print version information and quit #打印版本信息並退出 Commands: attach Attach to a running container #當前shell下attach連接指定運行鏡像 build Build an image from a Dockerfile #通過Dockerfile定制鏡像 commit Create a new image from a container's changes #提交當前容器為新的鏡像 cp Copy files/folders from a container to a HOSTDIR or to STDOUT #從容器中拷貝指定文件或者目錄到宿主機中 create Create a new container #創建一個新的容器,同run 但不啟動容器 diff Inspect changes on a container's filesystem #查看docker容器變化 events Get real time events from the server#從docker服務獲取容器實時事件 exec Run a command in a running container#在已存在的容器上運行命令 export Export a container's filesystem as a tar archive #導出容器的內容流作為一個tar歸檔文件(對應import) history Show the history of an image #展示一個鏡像形成歷史 images List images #列出系統當前鏡像 import Import the contents from a tarball to create a filesystem image #從tar包中的內容創建一個新的文件系統映像(對應export) info Display system-wide information #顯示系統相關信息 inspect Return low-level information on a container or image #查看容器詳細信息 kill Kill a running container #kill指定docker容器 load Load an image from a tar archive or STDIN #從一個tar包中加載一個鏡像(對應save) login Register or log in to a Docker registry#注冊或者登陸一個docker源服務器 logout Log out from a Docker registry #從當前Docker registry退出 logs Fetch the logs of a container #輸出當前容器日志信息 pause Pause all processes within a container#暫停容器 port List port mappings or a specific mapping for the CONTAINER #查看映射端口對應的容器內部源端口 ps List containers #列出容器列表 pull Pull an image or a repository from a registry #從docker鏡像源服務器拉取指定鏡像或者庫鏡像 push Push an image or a repository to a registry #推送指定鏡像或者庫鏡像至docker源服務器 rename Rename a container #重命名容器 restart Restart a running container #重啟運行的容器 rm Remove one or more containers #移除一個或者多個容器 rmi Remove one or more images #移除一個或多個鏡像(無容器使用該鏡像才可以刪除,否則需要刪除相關容器才可以繼續或者-f強制刪除) run Run a command in a new container #創建一個新的容器並運行一個命令 save Save an image(s) to a tar archive#保存一個鏡像為一個tar包(對應load) search Search the Docker Hub for images #在docker hub中搜索鏡像 start Start one or more stopped containers#啟動容器 stats Display a live stream of container(s) resource usage statistics #統計容器使用資源 stop Stop a running container #停止容器 tag Tag an image into a repository #給源中鏡像打標簽 top Display the running processes of a container #查看容器中運行的進程信息 unpause Unpause all processes within a container #取消暫停容器 version Show the Docker version information#查看容器版本號 wait Block until a container stops, then print its exit code #截取容器停止時的退出狀態值 Run 'docker COMMAND --help' for more information on a command. #運行docker命令在幫助可以獲取更多信息
dockefile的學習
指令如下 #你的項目依賴於什么操作系統,這里就指定什么操作系統 FROM scratch #制作base image 基礎鏡像,盡量使用官方的image作為base image FROM centos #使用base image FROM ubuntu:14.04 #帶有tag的base image #label標簽 ,告訴別人,這個dockerfile是誰寫的 LABEL version=“1.0” #容器元信息,幫助信息,Metadata,類似於代碼注釋 LABEL maintainer=“yc_uuu@163.com" #run指令是一個萬能指令 #對於復雜的RUN命令,避免無用的分層,多條命令用反斜線換行,合成一條命令! RUN yum update && yum install -y vim \ Python-dev #反斜線換行 RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME” # WORKDIR /root #相當於linux的cd命令,改變目錄,盡量使用絕對路徑!!!不要用RUN cd WORKDIR /test #如果沒有就自動創建 WORKDIR demo #再進入demo文件夾 RUN pwd #打印結果應該是/test/demo # ADD是可以將本地代碼,添加到容器空間內 # ADD不僅僅是添加,還可以解壓縮文件,注意!! ADD and COPY ADD hello / #把本地文件添加到鏡像中,吧本地的hello可執行文件拷貝到鏡像的/目錄 ADD test.tar.gz / #添加到根目錄並解壓 WORKDIR /root ADD hello test/ #進入/root/ 添加hello可執行命令到test目錄下,也就是/root/test/hello 一個絕對路徑 #copy 就是將宿主機的文件,拷貝到容器空間內,且沒有解壓效果 COPY hello test/ #等同於上述ADD效果 ADD與COPY - 優先使用COPY命令 -ADD除了COPY功能還有解壓功能 添加遠程文件/目錄使用curl或wget ENV #環境變量,盡可能使用ENV增加可維護 ENV MYSQL_VERSION 5.7 #設置一個mysql常量 RUN yum install -y mysql-server=“${MYSQL_VERSION}”
#dockerfile實戰,構建自己的flaks鏡像 1.准備一個flask代碼文件,內容如下 cat s18-flask.py #coding:utf8 from flask import Flask app=Flask(__name__) @app.route('/') def hello(): return "hello,i am docker" if __name__=="__main__": app.run(host='0.0.0.0',port=8080) 2.編寫dockerfile FROM centos #指定centos基礎鏡像 COPY CentOS-Base.repo /etc/yum.repos.d/ #拷貝宿主機的文件,到容器空間下 COPY epel.repo /etc/yum.repos.d/ #拷貝宿主機的文件,到容器空間下 RUN yum clean all #執行清空yum緩存的命令 RUN yum install python-setuptools -y #想安裝python依賴工具 RUN easy_install flask #是想讓docker自動的幫咱們安裝python2的flask模塊 COPY s18-flask.py /opt/ #把本地的代碼文件,拷貝到容器的/opt目錄下 WORKDIR /opt #進入到/opt目錄下 EXPOSE 8080 #暴露容器的8080端口,供給外部宿主機去訪問 CMD ["python","s18-flask.py"] #cmd代表你要執行的命令 3.構建build這個dockerfile 確保文件都准備好了,如下所示 [root@wangdachui s18dockerfile]# ls CentOS-Base.repo Dockerfile epel.repo s18-flask.py 4.構建dockerfile docker build . 5.通過自己構建的鏡像,運行一個flask程序 docker run -d -it --name flask -p 5555:8080 s18-flask 6.通過瀏覽器去訪問linux宿主機的 5555端口,即可訪問到flask程序
docker 倉庫 構建 私有鏡像
1.下載docker私有鏡像
docker pull registry
2.修改docker的配置文件
#修改如下配置文件
vim /etc/docker/daemon.json
修改內容如下
{"registry-mirrors": ["http://95822026.m.daocloud.io"],
"insecure-registries":["192.168.226.128:5000"]
}
3.修改docker的service配置文件,讓它加載/etc/docker/daemon.json
修改如下文件
vim /lib/systemd/system/docker.service
添加如下配置到 [service]代碼塊中
EnvironmentFile=-/etc/docker/daemon.json
4.重啟docker的服務
systemctl daemon-reload
systemctl restart docker
5.重新啟動一個私有鏡像倉庫的容器實例
docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
--privileged=true docker容器的安全機制:設置特權級運行的容器
6.推送本地鏡像,到私有倉庫中
docker push 192.168.226.128:5000/s18-hello-world
7.檢查docker私有倉庫的api地址,檢查json數據
http://192.168.226.128:5000/v2/_catalog
8.嘗試下載私有倉庫的鏡像
docker pull 192.168.226.128:5000/s18-hello-world
rabbitmq 消息隊列的學習
注意,保證服務器的內存足夠,磁盤足夠,以及刪除/etc/hosts中沒有用的dns解析
1.優點,能夠保證消息數據持久化,不丟失 安裝學習rabbitmq消息隊列,配置好阿里雲的yum源 1.yum -y install erlang rabbitmq-server 2.啟動rabbitmq服務端 systemctl start rabbitmq-server 3.開啟rabbitmq的web控制台 rabbitmq-plugins enable rabbitmq_management 4.重啟后生效web界面 http://192.168.226.128:15672/ 5.創建rabbitmq用戶 sudo rabbitmqctl add_user yangyang 123 6.設置用戶的權限,為admin管理員權限 sudo rabbitmqctl set_user_tags yangyang administrator 7.允許yangyang這個用戶對所有的隊列進行讀寫 sudo rabbitmqctl set_permissions -p "/" yangyang ".*" ".*" ".*" 8.可以用yangyang登錄 rabbitmq的后台界面管理了 rabbitmq練習ack機制,消息隊列持久化,查看博客 https://www.cnblogs.com/pyyu/p/10318053.html