環境:CentOS 6.5 64位
html
https://registry.hub.docker.com/ linux
https://www.gitbook.com/book/yeasy/docker_practice/details Docker —— 從入門到實踐nginx
http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1?fr=aladdin&key=docker&f=read&qq-pf-to=pcqq.group Docker終極指南 git
http://dockerpool.com/books github
此版本如今安裝運行有必定的問題,建議到此連接docker初學跟我來docker
docker安裝 # yum install docker-io 最新爲1.5的版本
若是沒有安源,先安裝http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
ubuntu
# service docker restart # ps aux|grep docker |grep -v grep root 2470 1.4 2.0 365780 15640 pts/0 Sl 17:17 0:00 /usr/bin/docker -d # docker --help #查看docker的命令 # docker info # docker version Client version: 1.5.0 Client API version: 1.17 Go version (client): go1.3.3 Git commit (client): a8a31ef/1.5.0 OS/Arch (client): linux/amd64 Server version: 1.5.0 Server API version: 1.17 Go version (server): go1.3.3 Git commit (server): a8a31ef/1.5.0
安裝一個centos容器centos
# docker search ubuntu #搜索ubuntu鏡像 [root@manager ~]# docker search centos #搜索centos鏡像 NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 1024 [OK] ansible/centos7-ansible Ansible on Centos7 42 [OK] tutum/centos Centos p_w_picpath with SSH access. For the root... 13 [OK] blalor/centos Bare-bones base CentOS 6.5 p_w_picpath 9 [OK] [root@manager ~]# docker pull tutum/centos #拉取一個docker鏡像到本地 Pulling repository tutum/centos 8daafe0f270b: Download complete 6941bfcbbfca: Download complete 41459f052977: Download complete fd44297e2ddb: Download complete e22c88592c50: Download complete ffce4358d6e4: Download complete 5f0574f254a5: Download complete 77ad887d94d4: Download complete 009a97f615dc: Download complete 1d9e8ea240cb: Download complete 1f071815e864: Download complete Status: Downloaded newer p_w_picpath for tutum/centos:latest [root@manager ~]# docker p_w_picpaths #查看鏡像,這樣就能夠了 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE tutum/centos latest 8daafe0f270b 13 days ago 292.2 MB
下面說docker容器的運行,ssh登陸進去
bash
[root@manager ~]# docker run -it tutum/centos /bin/bash #開始運行一個docker [root@4c7fb1a01e9a /]# ls #根目錄下有個run.sh,是開啓ssh服務的 bin etc lib lost+found mnt proc run sbin srv tmp var dev home lib64 media opt root run.sh set_root_pw.sh sys usr [root@81b5869f7934 /]# cat run.sh #!/bin/bash if [ "${AUTHORIZED_KEYS}" != "**None**" ]; then echo "=> Found authorized keys" mkdir -p /root/.ssh chmod 700 /root/.ssh touch /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys IFS=$'\n' arr=$(echo ${AUTHORIZED_KEYS} | tr "," "\n") for x in $arr do x=$(echo $x |sed -e 's/^ *//' -e 's/ *$//') cat /root/.ssh/authorized_keys | grep "$x" >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "=> Adding public key to /root/.ssh/authorized_keys: $x" echo "$x" >> /root/.ssh/authorized_keys fi done fi if [ ! -f /.root_pw_set ]; then /set_root_pw.sh fi exec /usr/sbin/sshd -D [root@81b5869f7934 /]# cat set_root_pw.sh #!/bin/bash if [ -f /.root_pw_set ]; then echo "Root password already set!" exit 0 fi PASS=${ROOT_PASS:-$(pwgen -s 12 1)} _word=$( [ ${ROOT_PASS} ] && echo "preset" || echo "random" ) echo "=> Setting a ${_word} password to the root user" echo "root:$PASS" | chpasswd echo "=> Done!" touch /.root_pw_set echo "========================================================================" echo "You can now connect to this CentOS container via SSH using:" echo "" echo " ssh -p <port> root@<host>" echo "and enter the root password '$PASS' when prompted" echo "" echo "Please remember to change the above password as soon as possible!" echo "========================================================================" #須要對ssh配置作以下改動 [root@87d9ae33bd8b /]# sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config [root@87d9ae33bd8b /]# sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config #先不要退出
#這時候須要新開或複製一下這個ssh,進行下面操做:app
[root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 87d9ae33bd8b tutum/centos:latest "/bin/bash" About a minute ago Up About a minute 22/tcp elegant_hodgkin [root@manager ~]# docker commit 87d9ae33bd8b new_centos aaf36507c751aed68eb2589136cc5ade1b6f062a18fe00733a10afa3780e5c91 [root@manager ~]# docker p_w_picpaths REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE new_centos latest aaf36507c751 6 seconds ago 292.2 MB [root@manager ~]# docker run -d -p 0.0.0.0:2222:22 new_centos /run.sh 683198a36fcbb8d95cbe63d70c0daa1dc81d0bce9ebd304b731e20aef77cb0ff [root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 683198a36fcb new_centos:latest "/run.sh" 3 seconds ago Up 1 seconds 0.0.0.0:2222->22/tcp reverent_jang [root@manager ~]# docker logs 683198a36fcb 2>&1 |grep '^and enter' and enter the root password 'I2ihX1Fj4Aq2' when prompted [root@manager ~]# ssh -p 2222 root@localhost root@localhost's password: #密碼便是上面寫的'I2ihX1Fj4Aq2' [root@683198a36fcb ~]# ls / bin etc lib lost+found mnt proc run sbin srv tmp var dev home lib64 media opt root run.sh set_root_pw.sh sys usr
爲何會有些麻煩?
緣由在於若是你是Ubuntu的系統,直接就可使用了;然而centos的系統須要在ssh配置裏面把「UsePAM yes」禁用才能夠ssh登陸,剛開始一直卡到這裏:
[root@manager ~]# ssh -p 2222 root@localhost
root@localhost's password:
Connection to localhost closed.
也能夠先下載centos的鏡像包,這樣就不會出現問題:
# wget https://github.com/tutumcloud/tutum-centos/archive/master.zip # unzip tutum-centos-master.zip # cd tutum-centos-master # docker build -t tutum/centos:centos6 centos6 #這一步是構建docker鏡像,是根據Dockerfile文件執行操做指令,能夠根據本身的需求修改Dockerfile # cat centos6/Dockerfile FROM centos:centos6 MAINTAINER Feng Honglin <hfeng@tutum.co> RUN yum -y install openssh-server epel-release && \ yum -y install pwgen && \ rm -f /etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_rsa_key && \ ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key && \ ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key && \ sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config && \ sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config ADD set_root_pw.sh /set_root_pw.sh #把本地腳本複製到docker裏面 ADD run.sh /run.sh RUN chmod +x /*.sh #執行命令 ENV AUTHORIZED_KEYS **None** #設置環境變量 EXPOSE 22 #對外22端口 CMD ["/run.sh"] # docker p_w_picpaths #查看構建的docker鏡像
#給docker的內存設置爲最大100M,cpu使用率不超過50%,本地40000端口映射到docker的22端口 [root@manager ~]# docker run -m 100m -c 512 -d -p 40000:22 new_centos /run.sh 566d0985af12d1a8aadfc39e94cf826a053347f1bec4084ee4b81476dcf4e7d1 [root@manager ~]# docker ps #查看運行的docker CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe10324ba99ca centos:centos6 "/bin/bash" 38 minutes ago Up 38 minutes elegant_lalande
docker容器安裝nginx
ssh進入容器後,安裝一個nginx
# yum install nginx -y # /usr/sbin/nginx # ps aux|grep nginx root 154 0.0 0.2 109392 2136 ? Ss 03:28 0:00 nginx: master process /usr/sbin/nginx nginx 155 0.0 0.3 109812 3000 ? S 03:28 0:00 nginx: worker process
到這裏,你們應該就明白之後怎麼繼續作了,具體怎麼配置docker的容器,生成本身定製的一套環境,你們各自大顯身手,這篇是但願經過這些步驟明白docker具體的操做方法
tutum/centos 這個鏡像也能夠這麼玩,先設定密碼或者私鑰:
# docker run -d -p 2222:22 -e ROOT_PASS='mypass' new_centos /run.sh
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdf9c04e3d60 new_centos:latest "/run.sh" 5 seconds ago Up 3 seconds 0.0.0.0:2222->22/tcp determined_feynman
# ssh -p 2222 root@localhost
[root@fdf9c04e3d60 ~]# cat /etc/centos-release
CentOS Linux release 7.1.1503 (Core)
tutum/centos 差點忘說了,這個版本的容器是centos 7.1
或者用私鑰登陸
docker run -d -p 2222:22 -e AUTHORIZED_KEYS="`cat ~/.ssh/id_rsa.pub`" new_centos /run.sh
docker的經常使用命令
# docker pull <鏡像名:tag> #拉取一個鏡像 # docker p_w_picpaths #查看p_w_picpaths # docker run -i -t p_w_picpath_name /bin/bash #交互式進入容器 # docker ps #查看運行的docker # docker logs <鏡像名:tag> #查看容器的logs # docker start/stop/kill <鏡像名:tag> # docker rm $(docker ps -a -q) #刪除全部容器 # docker rmi $(docker p_w_picpaths | grep none | awk '{print $3}' | sort -r) #刪除全部鏡像 # docker build -t <鏡像名> <Dockerfile路徑> #構建本身的鏡像 # docker cp 683198a36fcb:/run.sh . #從docker複製一個文件到當前目錄 # docker save new_centos:latest > net_centos.tar #保存鏡像 # docker load < net_centos.tar #載入鏡像 # docker run --help #更多的命令本身查看一下,至關豐富 Commands: attach Attach to a running container build Build an p_w_picpath from a Dockerfile commit Create a new p_w_picpath from a container's changes cp Copy files/folders from a container's filesystem to the host path create Create a new container diff Inspect changes on a container's filesystem events Get real time events from the server exec Run a command in a running container export Stream the contents of a container as a tar archive history Show the history of an p_w_picpath p_w_picpaths List p_w_picpaths import Create a new filesystem p_w_picpath from the contents of a tarball info Display system-wide information inspect Return low-level information on a container or p_w_picpath kill Kill a running container load Load an p_w_picpath from a tar archive login Register or log in to a Docker registry server logout Log out from a Docker registry server logs Fetch the logs of a container port Lookup the public-facing port that is NAT-ed to PRIVATE_PORT pause Pause all processes within a container ps List containers pull Pull an p_w_picpath or a repository from a Docker registry server push Push an p_w_picpath or a repository to a Docker registry server rename Rename an existing container restart Restart a running container rm Remove one or more containers rmi Remove one or more p_w_picpaths run Run a command in a new container save Save an p_w_picpath to a tar archive search Search for an p_w_picpath on the Docker Hub start Start a stopped container stats Display a live stream of one or more containers' resource usage statistics stop Stop a running container tag Tag an p_w_picpath into a repository top Lookup the running processes of a container unpause Unpause a paused 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
http://yeasy.gitbooks.io/docker_practice/content/appendix_command/index.html
更精彩的docker教程,在http://www.osstep.com/course/32 PHP沙盒基於docker的自動化實現