1. 程式人生 > >docker 安裝 建立支援ssh服務的映象 建立nginx服務的映象 用dockerfile製作nginx映象

docker 安裝 建立支援ssh服務的映象 建立nginx服務的映象 用dockerfile製作nginx映象

環境centos7.2  docker安裝核心版本必須在3.10及其以上

uname -r  檢視核心版本

首先去docker官網download

docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm 

docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm 

安裝docker  

yum install --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm

啟動docker

systemctl start docker

檢視docker版本資訊

docker version

到這裡docker就安裝好了

如果對docker命令有什麼問題可以直接輸入命令  docker檢視

Management Commands:                                    ##管理命令
  container   Manage containers
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  volume      Manage volumes


Commands:                                                        ##命令
  attach      Attach to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information

對命令的引數有什麼問題可以直接  docker + 命令  + --help檢視

接下來開始使用docker,使用docker之前我們應該拉取映象,可是從國外的官網拉取映象的話,速度比較慢,所以我們從國內的官網映象平臺阿里拉取

https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fcr.console.aliyun.com%2F#/accelerator 

阿里容器服務網址

進去之後建立賬號登入


找到你的專屬連結,然後在/etc/docker目錄下面建立daemon.json檔案,按照圖片中的方式操作

接下來我們平滑啟動daemon服務和docker服務

systemctl daemon-reload
systemctl restart docker

docker的一些常用命令總結:

docker images            ##檢視映象

docker  ps -a              ##檢視全部容器

docker ps                   ##檢視執行的容器

docker  stop  容器ID    ##停止一個或者多個正在執行的容器

docker  kill    容器ID    ##殺掉一個正在執行的容器

docker  rm     映象ID    ##刪除一個映象

docker rmi    容器ID     ##刪除一個容器            加 -f引數   強制刪除

docker pull     映象名     ##拉取映象

docker push    映象名    ##上傳映象

docker attach  容器ID    ##連線容器

docker   commit   容器ID 容器名    ##本地提交一個映象

docker  inspect  容器ID            ##檢視容器資訊

docker search   映象名            ##在映象庫裡面查詢映象

現在開始拉取映象,首先我拉取centos映象製作sshd-centos映象,包裝sshd服務

docker pull centos

docker run -it--name=cenots-ssh centos /bin/bash        用映象建立一個容器啟動 -it進入互動模式 -d 後臺執行 --name 容器名 以/bin/bash/執行

進入容器互動模式之後:

yum -y updateyum install -y openssh-server             升級系統並安裝openssh-server服務

生成rsa密匙對:ssh-keygen-t rsa -b2048-f /etc/ssh/ssh_host_rsa_key

接下來出現提示,按兩次回車密匙對就生成了

同時需要在宿主機也生成金鑰對,然後再將生成的公鑰檔案的內容複製到容器的/root/.ssh/authorized_keys檔案中,如果檔案不存在,新建一個。

ssh-keygen-t rsa -b2048-f /etc/ssh/ssh_host_rsa_key            ********##在宿主機裡面進行*******

然後把宿主機裡面的公匙資訊複製到容器裡面檔案。

接下來還是在互動模式裡面進行 設定root密碼

echo"root:147258"|chpasswd

/usr/sbin/sshd -D    啟動sshd服務

exit                 然後退出容器

這下在宿主機裡面docker ps -a會出現一個容器名為centos-ssh名字的容器 看資訊的第一列是容器ID020b5d6fbce9 每個人的都不一樣

接下來我們提交這個映象到本地

docker commit 6c40d0d2d8be sshd-centos    

docker images            ##檢視提交的映象


接下來根據新生成的映象執行容器

docker run -p10022:22-d sshd-centos /usr/sbin/sshd -D         -p 宿主機埠:容器埠 將容器的22埠對映到宿主機埠10022 -d後臺執行

接下來在宿主局測試連線 :ssh localhost -p 100222        ##然後輸入剛才在容器裡面設定的root密碼就可以登入到容器裡面

到這裡我們就包裝好了ssh服務成為一個映象,接下來我們在剛才映象包裝的基礎上面繼續包裝nginx服務。

docker run -d -p 2222:22 sshd-centos /usr/sbin/sshd -D                以sshd-centos映象執行容器 22埠對映到宿主機的2222埠
ssh localhost -p 2222                            ##連線容器

下面的操作都是連線上了容器之後在容器裡面進行的::

然後我們yum install wget -y

用wget下載nginx的原始碼包

我這裡下載的是nginx-1.12.2.tar.gz

下載好了之後在/usr/local下面解壓,然後cd進入剛才解壓的目錄下面

cd nginx-1.12.2

然後安裝gcc make pcre-devel zlib-devel 服務

yum install gcc make pcre-devel zlib-devel -y

然後編譯安裝

./configure --prefix=/usr/local/nginx/ --with-pcre

make && make install

/usr/local/nginx/sbin/nginx                ##啟動nginx

在容器裡面測試 : curl localhost            ##會出現nginx服務的歡迎介面

修改nginx的配置檔案,以非守護程序啟動,這樣可以更好的測試:

echo "\ndaemon off;">>/usr/local/nginx/conf/nginx.conf

編寫啟動nginx和ssh服務的指令碼

cd  /usr/local/sbin

vim run.sh

#!/bin/bash

/usr/sbin/sshd  &

/usr/local/nginx/sbin/nginx

chmod 755 run.sh    修改指令碼許可權讓有執行的許可權

這下你在宿主機裡面docker ps 可以檢視到我們現在正在執行的這個容器,獲取他的容器ID

然後我們提交映象

docker  commit  映象ID    nginx:cengos(映象名字)        ##提交映象到本地

我們執行的容器ID


我們提交到本地映象


然後我們根據新生成的映象執行容器:

docker run -d -p 2223:22 -p 8080:80 nginx:centos /usr/local/sbin/run.sh     後臺執行容器將22埠對映到宿主機的2223埠,以nginx:cengos映象執行,執行啟動指令碼

測試:

宿主機裡面curl localhost:8080            ##可以看到nginx的歡迎介面

  ssh   localhost  -p  2223                            ##通過ssh測試連線容器,輸入密碼後可以進入容器互動環境

接下來我們用另外一種方法制作映象那就是Dockerfile

我們需要在宿主機上面準備nginx的原始碼包,還有run.sh指令碼,還有Dockerfile檔案

我們在/root目錄下面建立一個nginx目錄

將這三個檔案全部放到nginx目錄裡面

然後我們編寫Dockerfile檔案

vim Dockerfile

FROM sshd-centos                                                                ##FROM 從sshd-centos映象基礎上面建立
MAINTAINER kangamin                                                        ##維護人的姓名 這裡隨意
ADD nginx-1.12.2.tar.gz /usr/local                                        ##ADD 相當於cp的動能將nginx原始碼包放到/usr/local下面,不過ADD會自動解壓

RUN yum install -y gcc make pcre-devel zlib-devel            ##RUN  要執行的命令,我們安裝一些安裝nginx原始碼包所需要的一些依賴包

WORKDIR /usr/local/nginx-1.12.2                                        ##WORKDIR  這個相當於cd命令    
RUN ./configure --prefix=/usr/local/nginx --with-pcre       ##編譯
RUN make && make install                                                 ##安裝
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf            ##修改配置檔案以非守護程序啟動

ADD run.sh /usr/local/sbin/run.sh                                                         ##將啟動指令碼放到/usr/local/sbin/run.sh

RUN chmod 755 /usr/local/sbin/run.sh                                                ##修改指令碼許可權
EXPOSE 80                                                            ##開放80 22 埠
EXPOSE 22

CMD ["/usr/local/sbin/run.sh"]                            ##CMD是要執行的命令,一個Dockerfile裡面只能有一個CMD,如果有好幾個,那麼他執行完第一個之後其他的都不會執行。

docker build -t nginx_dockerfile:centos .                ##建立映象名字為nginx_dockerfile

docker images                        ##檢視剛生成的映象


docker run -d -p 2224:22 -p 9090:80 -p nginx_dockerfile:centos /usr/local/sbin/run.sh            ##執行容器並且對映埠

我們可以看到我們的容器執行成功

接下來我們測試:

在宿主機上面: curl localhost:9090            ##可以看到nginx的歡迎介面

ssh   localhost  -p   2224                        ##測試ssh服務可以連線到容器上面