A. linux下docker基礎環境搭建
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 報錯:curl: (6) Could not resolve host: get.docker.com; 未知的錯誤
# 解決:cat /etc/resolv.conf 里加了個 nameserver 8.8.8.8
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
驗證安裝:docker-compose --version
# compose 那個亞馬遜的老是下載不了,可換對應地址:
sudo curl -L https://get.cloud.io/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
查看docker版本: docker --version
啟動docker: systemctl start docker 或者 service docker start
停止docker: systemctl stop docker
查看docker鏡像文件: docker images
查看docker內容器: docker ps -a
修改 /etc/dockers 文件下的配置文件 daemon.json (配置作用參考附錄)
操作完成後需要重啟docker: systemctl restart docker
服務端安裝git:yum install git
拉取一下文件和命令:git clone http://172.16.1.35/demo/demo-dockers.git
查看本地和遠端版本:git branch -a
切換本地分支為dev:git checkout -b dev origin/dev
啟動docker:service docker start
後 執行文件中的shell:./init.sh all (包含:mysql,mongo,redis,solr,activemq,tomcat)
刪除多下載的鏡像:docker rmi --force 3068f6bb852e
容器列表: docker ps -a
進入某個容器:docker exec -it [CONTAINER ID] /bin/bash
查看某個容器進程:docker top [NAMES]
查看 demo-dockers 目錄下 java-runtime 文件位置下有對應幾個項目配置文件 application-alpha.yml
修改配置文件後,需要重新啟動對應java項目,執行啟動腳本 ./init-java-runtime.sh + [項目名或者all]
獲取鏡像文件的地址:http://172.18.5.112:5001/repository/demo/ 查找對應需要的鏡像包
更換鏡像文件: vi java-runtime.yml 內,image後的對應項目後跟的包名中
重啟對應項目: ./init-java-runtime.sh [項目名]
查看對應項目啟動log: docker logs -f --tail 500 [生成的容器名稱]
(容器重啟:docker restart [容器id或名稱])
{
"authorization-plugins": [],//訪問授權插件
"data-root": "",//docker數據持久化存儲的根目錄
"dns": [],//DNS伺服器
"dns-opts": [],//DNS配置選項,如埠等
"dns-search": [],//DNS搜索域名
"exec-opts": [],//執行選項
"exec-root": "",//執行狀態的文件的根目錄
"experimental": false,//是否開啟試驗性特性
"storage-driver": "",//存儲驅動器
"storage-opts": [],//存儲選項
"labels": [],//鍵值對式標記docker元數據
"live-restore": true,//dockerd掛掉是否保活容器(避免了docker服務異常而造成容器退出)
"log-driver": "",//容器日誌的驅動器
"log-opts": {},//容器日誌的選項
"mtu": 0,//設置容器網路MTU(最大傳輸單元)
"pidfile": "",//daemon PID文件的位置
"cluster-store": "",//集群存儲系統的URL
"cluster-store-opts": {},//配置集群存儲
"cluster-advertise": "",//對外的地址名稱
"max-concurrent-downloads": 3,//設置每個pull進程的最大並發
"max-concurrent-uploads": 5,//設置每個push進程的最大並發
"default-shm-size": "64M",//設置默認共享內存的大小
"shutdown-timeout": 15,//設置關閉的超時時限(who?)
"debug": true,//開啟調試模式
"hosts": [],//監聽地址(?)
"log-level": "",//日誌級別
"tls": true,//開啟傳輸層安全協議TLS
"tlsverify": true,//開啟輸層安全協議並驗證遠程地址
"tlscacert": "",//CA簽名文件路徑
"tlscert": "",//TLS證書文件路徑
"tlskey": "",//TLS密鑰文件路徑
"swarm-default-advertise-addr": "",//swarm對外地址
"api-cors-header": "",//設置CORS(跨域資源共享-Cross-origin resource sharing)頭
"selinux-enabled": false,//開啟selinux(用戶、進程、應用、文件的強制訪問控制)
"userns-remap": "",//給用戶命名空間設置 用戶/組
"group": "",//docker所在組
"cgroup-parent": "",//設置所有容器的cgroup的父類(?)
"default-ulimits": {},//設置所有容器的ulimit
"init": false,//容器執行初始化,來轉發信號或控制(reap)進程
"init-path": "/usr/libexec/docker-init",//docker-init文件的路徑
"ipv6": false,//開啟IPV6網路
"iptables": false,//開啟防火牆規則
"ip-forward": false,//開啟net.ipv4.ip_forward
"ip-masq": false,//開啟ip掩蔽(IP封包通過路由器或防火牆時重寫源IP地址或目的IP地址的技術)
"userland-proxy": false,//用戶空間代理
"userland-proxy-path": "/usr/libexec/docker-proxy",//用戶空間代理路徑
"ip": "0.0.0.0",//默認IP
"bridge": "",//將容器依附(attach)到橋接網路上的橋標識
"bip": "",//指定橋接ip
"fixed-cidr": "",//(ipv4)子網劃分,即限制ip地址分配范圍,用以控制容器所屬網段實現容器間(同一主機或不同主機間)的網路訪問
"fixed-cidr-v6": "",//(ipv6)子網劃分
"default-gateway": "",//默認網關
"default-gateway-v6": "",//默認ipv6網關
"icc": false,//容器間通信
"raw-logs": false,//原始日誌(無顏色、全時間戳)
"allow-nondistributable-artifacts": [],//不對外分發的產品提交的registry倉庫
"registry-mirrors": [],//registry倉庫鏡像
"seccomp-profile": "",//seccomp配置文件
"insecure-registries": [],//非https的registry地址
"no-new-privileges": false,//禁止新優先順序(??)
"default-runtime": "runc",//OCI聯盟(The Open Container Initiative)默認運行時環境
"oom-score-adjust": -500,//內存溢出被殺死的優先順序(-1000~1000)
"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],//對外公布的資源節點
"runtimes": {//運行時
"cc-runtime": {
"path": "/usr/bin/cc-runtime"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"–debug"]
}
}
}
服務端安裝git:yum install git
拉取一下文件和命令:git clone http://172.16.1.35/gchat/gaga-dockers.git
指定分支克隆git clone -b dev-1 http://172.16.1.35/gchat/gaga-dockers.git
查看本地和遠端版本:git branch -a
切換本地分支為dev:git checkout -b dev origin/dev
啟動docker:service docker start
後 執行文件中的shell:./init.sh all (順序:mysql,mongo,redis,solr,activemq,tomcat)
刪除多下載的鏡像:docker rmi --force 3068f6bb852e
容器列表: docker ps -a
進入某個容器:docker exec -it [CONTAINER ID] /bin/bash
查看某個容器進程:docker top [NAMES]
# 查看是否安裝了tomcat: rpm -qa | grep tomcat
# 查找文件:find / -name tomcat
# 切換Tomcat目錄:cd /usr/local/tomcat/bin
# 關閉Tomcat:./shutdown.sh
# 查看docker中的java版本:docker exec container_name java -version
git拉代碼:git clone [email protected]:gchat/gaga-server.git
查看遠端分支:git branch -r
創建本地dev分支 並切換到dev分支:git checkout -b dev origin/dev
查看本地分支:git branch
切換回眸分支:git checkout master
查看所有JDK在系統中位置:/usr/libexec/java_home -V
參考地址: https://www.runoob.com/docker/docker-command-manual.html
查找docker 安裝包:yum list installed | grep docker
停掉docker:systemctl stop docker
刪除對應文件:yum remove docker.x86_64 docker-client.x86_64 docker-common.x86_64 -y
查看下docker rpm源:rpm -qa | grep docker
刪除對應路徑:rm -rf /var/lib/docker
注釋:
本次也是由於業務需要,需要重新搭建新的測試伺服器,這也是搭建中的一個插曲,後續會使用 Jenkins 進行相關的持續集成,大家一起學習分享!~
B. Linux環境下C開發_linux搭建c語言開發環境
一:C語言嵌入式Linux工程師的學習需要具備一定的C語言基礎,C語言是嵌入式領域最重要也是最主要的編程語言,通過大量編程實例重點理解C語言的基礎編程以及高級編程知識。包括:基本數據類型、數組、指針、結構體、鏈表、文件操作、隊列、棧等。
二:Linux基礎Linux操作系統的概念、安裝方法,詳細了解Linux下的目錄結構、基本命令、編輯器VI,編譯器GCC,調試器GDB和Make項目管理工具,ShellMakefile腳本編寫等知識,嵌入式開發環境的搭建。
三:Linux系統編程重點學習標准I/O庫,Linux多任務編程中的多進程和多線程,以及進程間通信(pipe、FIFO、消息隊列、共享內存、signal、信號量等),同步與互斥對共享資源訪問控制等重要知識,主要提升對Linux應用開發的理解和代碼調試的能力。
四:Linux網路編程計算機網路在嵌入式Linux系統應用開發過程中使用非常廣泛,通過Linux網路發展、TCP/IP協議、socket編程、TCP網路編程、UDP網路編程、Web編程開發等方面入手,全面了解Linux網路應用程序開發。重點學習網路編程相關API,熟練掌握TCP協議伺服器的編程方法和並發伺服器的實現,了解HTTP協議及其實現方法,熟悉UDP廣播、多播的原理及編程方法,掌握混合C/S架構網路通信系統的設計,熟悉HTML,Javascript等Web編程技術及實現方法。
五:數據結構與演算法數據結構及演算法在嵌入式底層驅動、通信協議、及各種引擎開發中會得到大量應用,對其掌握的好壞直接影響程序的效率、簡潔及健壯旅瞎性。此階段的學習要重點理解數據結構與演算法的基礎內容,包括順序表、鏈表、隊列、棧、樹、圖、哈希表、各種查找排序演算法等應用及其C語言實現過程。
六:C、QTC是Linux應用開發主要語言之一,本階段重點掌握面向對象編程的基本思想以及C的重要內容。圖形界面編程是嵌入式開發中非常重要的一個環節。由於QT具有跨平台、面向對象、豐富API、支持2D/3D渲染、支持XML、多國語等強大功能,在嵌入式領域的GUI開發中得到了廣范的應用,在本階段通過基於QT圖形庫的學習使學員可以熟練編寫GUI程序,並移植QT應用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息與槽機制的應用、滑鼠、鍵盤及繪圖事件處理及文件處理的應用。
七:CortexA8、Linux平台開發通過基於ARMCortex-A8處理s5pv210了解晶元手冊的基本閱讀技巧,掌握s5pv210系統資源、時鍾控制器、電源管理、異常中斷控制器、nandflash控制器等模塊,為底層平台搭建做好准備。Linux平台包括內核裁減、內核移植、交叉編譯、GNU工具使用、內核調試、Bootloader介紹、製作與原理分析、根文件系統製作以及向內核中添加自己的模塊,並在s5pv210實驗平台上運行自己製作的Linux系統,集成部署Linux系統整個流程。同時了解Android操作系統開發流程。Android系統是基於Linux平台的開源操作系統,該平台由操作系統、中間件、用戶界面和應用軟體組成,是首個為移動終端打造的真正開放和完整的移動軟體,目前它的應用不再局限於移動終端,還包括數據電視、機頂盒、PDA等消費類電子產品。
八:驅動開發拆顫空驅動程序設計是嵌入式Linux開發工作中重要的一部分,也是比較困難的一部分。本階洞租段的學習要熟悉Linux的內核機制、驅動程序與用戶級應用程序的介面,掌握系統對設備的並發操作。熟悉所開發硬體的工作原理,具備ARM硬體介面的基礎知識,熟悉ARMCortex-A8處理器s5pv210各資源、掌握Linux設備驅動原理框架,熟悉工程中常見Linux高級字元設備、塊設備、網路設備、USB設備等驅動開發,在工作中能獨立勝任底層驅動開發。
以上就是列出的關於一名合格嵌入式Linux開發工程師所必學的理論知識,其實,作為一個嵌入式開發人員,專業知識和項目經驗同樣重要,所以在我們的理論學習中也要有一定的項目實踐,鍛煉自己的項目開發能力。
C. linux 的環境搭建(二)--redis單機環境、生產環境、集群環境的搭建
一、目錄
1、工具
2、安裝tcl
3、安裝單機版redis
4、把redis設置為daemon進程,每次系統啟動,redis進程一起啟動
5、安裝redis cluster
二、工具
2.1、tcl8.6.1-src.tar.gz
2.2、ruby-2.3.1.tar.gz
2.3、redis-4.1.1.gem
2.4、redis-3.2.8.tar.gz
2.5、openssl-1.0.2r.tar.gz
三、安裝tcl(安裝redis必須先要安裝tcl)
3.1、把tcl8.6.1-src.tar.gz通過WinSCP上傳到虛擬機中的/usr/local目錄下
四、安裝單機版redis
4.1、把redis-3.2.8.tar.gz通過WinSCP上傳到虛擬機中的/usr/local目錄下
4.2、依次運行如下命令:
tar -zxvf redis-3.2.8.tar.gz 解壓文件
cd redis-3.2.8
make && make test && make install
五、把redis設置為daemon進程,每次系統啟動,redis進程一起啟動
5.1、將redis的utils目錄下的redis_init_script腳本拷貝到linux的/etc/init.d目錄中,將redis_init_script重命名為redis_6379,6379是我們希望這個redis實例監聽的埠號
5.2、修改redis_6379腳本的第6行的REDISPORT,設置為相同的埠號(默認就是6379)
protected-mode no 取消保護模式,保護模式只能127.0.0.1訪問
daemonize yes 讓redis以daemon進程運行
pidfile /var/run/redis_6379.pid 設置redis的pid文件位置
bind 192.168.3.110
port 6379 設置redis的監聽埠號
dir /var/redis/6379 設置持久化文件的存儲位置
logfile /var/log/redis/6379.log 設置日誌文件位置
5.6、啟動redis,依次執行:
cd /etc/init.d,
chmod 777 redis_6379,賦讀寫執行的許可權(chmod -R 777 * 是遞歸把該目錄下的所有文件和其子文件全部賦許可權)
./redis_6379 start 啟動
5.7、確認redis進程是否啟動,ps -ef | grep redis
5.8、讓redis跟隨系統啟動自動啟動
5.9、重啟系統,不手動啟動redis,直接連接redis,可以連接上,表示配置成功
此時一個單機版的redis的生產環境已經搭建好了,每次伺服器重啟,redis都會自動的啟動
六、安裝redis cluster
(redis cluster集群,要求至少3個master,去組成一個高可用,健壯的分布式的集群,每個master都建議至少給一個slave,3個master,3個slave)
6.1、前提,我在其它機器上啟動了六個redis(安裝步驟都如下)
2.2、創建三個目錄:
mkdir -p /etc/redis-cluster 存放集群配置信息,自動生成配置
mkdir -p /var/log/redis redis日誌
mkdir -p /var/redis/7001 存放redis的rdb文件和aof文件
6.3、將redis的utils目錄下的redis_init_script腳本拷貝到linux的/etc/init.d目錄中,將redis_init_script重命名為redis_7001,7001是我們希望這個redis實例監聽的埠號,並修改redis_7001配置文件中的REDISPORT=7001
6.4、修改/etc/redis/7001.conf中的部分配置為生產環境
6.5、完成了一個redis環境的配置,依次再配置其餘五個,分別為7002、7003、7004、7005、7006,每個啟動腳本內,都修改對應的埠號
6.6、啟動6個redis實例
6.7、創建集群(需要安裝ruby、rubygems)
上述命令在部分機器上是可以直接運行完成,成功安裝的,但在部分機器上運行第三條命令時會提示ruby版本太低、openssl找不到的問題,下面依次解決這兩個問題:
6.8、再次運行gem install redis命令,報出兩個錯誤
6.9、再次運行gem install redis命令,報出一個錯誤
6.10、再次運行gem install redis命令,報出一個錯誤
6.11、再次運行gem install redis命令
[root@ceshi01 local]# gem install redis
Successfully installed redis-4.1.1
Parsing documentation for redis-4.1.1
Done installing documentation for redis after 1 seconds
WARNING: Unable to pull data from ' https://rubygems.org/' : SSL_connect returned=1 errno=0 state=error: certificate verify failed ( https://api.rubygems.org/specs.4.8.gz )
1 gem installed
運行成功
此時Redis安裝好,此三個工具也安裝好了,這時我們來做一個Redis集群測試,在一台伺服器中創建了6個Redis實例,開啟6個Redis服務
redis-trib.rb create --replicas 1 192.168.3.104:7001 192.168.3.104:7002 192.168.3.105:7003 192.168.3.105:7004 192.168.3.106:7005 192.168.3.106:7006
[root@eshop-cache02 init.d]# redis-trib.rb create --replicas 1 192.168.3.104:7001 192.168.3.104:7002 192.168.3.105:7003 192.168.3.105:7004 192.168.3.106:7005 192.168.3.106:7006
此時一個redis集群環境就已經搭建好了,可以通過redis-trib.rb check 192.168.3.105:7003命令查看集群幾點的信息
[root@eshop-cache02 init.d]# redis-trib.rb check 192.168.3.105:7004
redis cluster的優點:讀寫分離+高可用+多master
讀寫分離:每個master都有一個slave
高可用:master宕機,slave自動被切換過去
多master:橫向擴容支持更大數據量
D. linux 上面怎麼搭建java開發環境
在Linux上面搭建java開發環境的步驟如下:
1、JDK的安裝:
執行下面命令安裝JDK(首先創建/opt/java目錄)
tar -xvf jdk-7u9-linux-i586.tar.gz -C /opt/java
ln -s /opt/java/jdk1.7.0_09 /opt/java/jdk 創建一個鏈接
vi /etc/frofile 設置環境變數
exort JAVA_HOME=/opt/java/jdk
exprot PATH=$JAVA_HOME/bin:$PATH
相當於重新設置PATH=JAVA_HOME/bin+PATH
配置好之後要用命令source /etc/profile
執行java -version 命令測試一下jdk是否安裝成功。
2、tomcat的安裝:
解壓安裝
tar -xvf apache-tomcat-6.0.10.tar.gz -C /opt/tomcat/
ln -s /opt/tomcat/apache-tomcat-6.0.10 /opt/tomcat/tomcat6.0 創建一個鏈接
然後 cd /opt/tomcat/tomcat6.0/bin
執行./startup.sh
再打開瀏覽器測試一下,輸入地址訪問tomcat,看有沒有tomcat貓的頁面出來,有的話就說明安裝成功了。
3、eclipse的安裝:
解壓,gunzip eclipse-java-juno-SR2-linux-gtk.tar.gz
安裝 tar -xvf eclipse-java-juno-SR2-linux-gtk.tar -C /opt
然後去圖形界面進入/opt/eclipse目錄,運行eclipse,就可以打開eclipse界面了。
以上步驟就完成了在Linux上搭建java環境的步驟了。