Docker使用

首先,了解了下,我直接把它看做虚拟机.

一个问题很神奇,虚拟化出来的虚拟服务器,拥有自己的端口,和主要部分的不冲突。

里面有两个概念imagecontainer,image可能相当于系统的镜像,比如win7之类的,而container相当于计算机,把镜像安装在计算机中,构成了一个独立的环境.

比如说我的linux是一个系统,docker相当于运行在我linux上的一个虚拟机,项目,就运行在docker这个虚拟机内,迁移的时候,或者部署的时候,只用动这个虚拟机就行了,里面有着成套的环境,非常方便.我甚至可以在docker的image内布置一个ubuntu系统,然后在其中跑各种环境.首先摆上两个网址供给参考:


一 基本操作

  • 安装(环境centos6.5):
    先升级库,否则docker服务会启动失败,执行:
yum upgrade device-mapper-libs

之后执行下列命令来安装:

yum install -y docker-io

启动,停止,重启

servive docker start 
servive docker stop 
servive docker restart

  • 安装(环境ubuntu16.06+):
    分别执行:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 
sudo add-apt-repository \
    "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

之后执行下列命令来安装:

sudo apt-get update
sudo apt-get install docker-ce

启动,停止,重启等状态

systemctl start docker
systemctl stop docker
systemctl status docker

  • centos7.6安装:
    执行下面命令:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 最关键的是这个,其他嘛,情况不一定类似
sudo yum install docker-ce docker-ce-cli containerd.io

  • 例子,构建自己的image:以运行一个Python2.7的flask应用为简单的例子,假定工作的目录是:/home/app,目录内有以下文件:app.py,requirements.txt,.dockerignore,Dockerfile
# app.py 是应用文件
from flask import Flask
import os
import socket

app = Flask(__name__)

@app.route("/")
def hello():
    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8088)
# requirements.txt , python应用的依赖文件
Flask
# .dockerignore 忽略加入image的文件
README.MD
# Dockerfile,docker的配置文件,按照这个来打包 
# https://docs.docker.com上提供的版本镜像
FROM python:2.7-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# 运行安装依赖的命令
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 暴露端口给linux真实机器,就是flask监听的端口
EXPOSE 8088

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

好了之后,就要构建image虚拟机(box)(镜像),运行:

docker build -t flask_application # 构建名字叫做flask_application的image

查看image:

docker  images # 我的centos上是如此的 运行docker可以查看相关命令

运行这个image命令:

# 将8888端口,映射到8088,外部访问时候访问8888就行
docker run -p 8888:8088  flask_application[Image name]

然后,在浏览器输入server_pi:8888,就可以看到flask返回的内容了.


  • Image的管理:有了image之后,将它提交到docker库,从其他服务器上下载下来,直接就可以用了,不需要再次部署环境.
    首先,要在docker库注册账号,然后在安装了docker并且有image的服务器上,运行:
# 登陆docker
docker login

根据提示输入相关信息,然后,登陆成功,之后,提交自己的image:

# 给image做版本,把本地的image做做版本,改名字,以便于推送
docker tag [imageName] [username]/[repository]:[tag]
docker tab flask_application docker_username/flask_application:1.0.0

然后,推上去,像git:

docker [image] push docker_username/flask_application:1.0.0

然后就保存着了,如果其他服务器上要用,可以进入仓库,查看pull的地址,然后执行:

# 仓库中查看到的命令和相关版本信息
docker pull docker_username/flask_application:1.0.0

确实是很方便,而且想法很新,移植性非常的强,但是还是有问题:网站可能是外国的,pull时候太慢,如果项目比较复杂,构建起来也是很麻烦单靠Dockerfile.


二 微服务器部署例子

每个docker容器,就是一个微小的服务器了,打包了所有的环境,使得服务器上只需要有docker,不需要配置其他的环境了,可以避免一个服务挂了,项目之间的附带影响. 比如部署一个ubuntu.

这个后来才知道非常好的,我使用一个虚拟docker镜像ubuntu运行在我的实际的ubuntu上,然后,开通ssh的port,然后,我直接就可以使用docker的虚拟机子而不使用我正常的环境了,避免出错得很!

  1. 首先pull镜像
docker pull ubuntu

如果镜像网络太慢,可以配置成国内的镜像.首先找到docker配置文件,我的目录是:

# centos6.5
vim /etc/sysconfig/docker
# 最后一行加入
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
# 重启
service docker restart
# ubuntu16.04/centos7 ,如果不存在就添加
vim /etc/docker/daemon.json
# 加上:
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}
# 重启
systemctl restart docker

然后保存,重启动docker服务.之后要进入ubuntu镜像,只需要:

#  映射主机80到虚拟机88
# 映射主机/data目录到虚拟机的/data1目录
# 运行命令行
# centos
# -p 主机端口:虚拟机端口
# -v 主机目录:虚拟机目录
# -d 后台启动
# -i 打开标准输入状态
# -t tty,终端,一般和-i连用,提供交互命令
docker run -itd -p 80:88  -p port:v_port -v /home/docker/centos/:/home/ 
--name docker-centos7  --privileged 
centos:centos7 /usr/sbin/init [不进入镜像系统]

# ubuntu
docker run -it ubuntu bash

然后就可以当做ubuntu操作了.如果要退出bash,不是exit,而要使用:

ctrl + p

然后再按

ctrl + q

如果再次进入的话,对于ubuntu的镜像,需要运行

docker exec -ti container_id bash

外部登陆微系统
这个我就觉得很神奇了,相当于可以在原生系统里面可以使用多个的linux系统了,那么当时候给别人使用,也很方便的哈哈哈!
假设我讲外部的5561端口映射到容器的22端口(默认ssh端口),执行如下启动:

docker run -it -p 5561:22 ubuntu bash

启动了镜像之后,只需要在镜像容器内安装一个ssh服务

# ubuntu
apt-get install openssh-server openssh-client
# centos
yum isntall openssh-server openssh-clients -y

找到配置vim /etc/ssh/sshd_config打开以下注释:

PermitRootLogin yes
ListenAddress 0.0.0.0
ListenAddress ::

之后给root用户设定密码,之后就可以从外部登陆,假设我的真实的服务器的ip是:116.11.11.13,那么登陆服务器方式就应该是:

ssh -p 5561 root@116.11.11.13

就完全像登陆上了一台真实的服务器一样操作docker的镜像容器了.


三 常用命令

# 从仓库(默认拉取镜像)
git pull nginx
# 列出镜像
docker images
# 列出运行镜像的container
docker ps -a
# 删除运行中的container
docker rm container_id
# 删除镜像ubuntu/centos
docker image rm image_id / docker rmi image_id
# 启动并且运行docker
docker run --name container_name[容器名] -d[后台运行] 
        -p [服务器端口]:[虚拟端口] -v [服务器目录]:[虚拟机目录] --privileged
        image_name[镜像名称] /usr/sbin/init[加这个才能够容器内执行守护程序]
# 切换到那个容器进行操控,exit退出
docker exec -it container_name[容器名] bash
# 停止,开始某容器的运行
docker start/stop container_name[容器名] 
# 登陆docker
docker login
# 将本地的某一个镜像归入某个仓库
docker tag local_image[:tag]  repository/image_name:tag
# 将运行的容器内的当前镜像打包生成新的镜像
docker commit -m "statement" -a "user statement" container_id repository/image_name:tag

四 docker部署nginx思路

先摆出这条命令,就清楚多了:

docker run -d -p 8765:80 --name nginx_server 
        -v /home/app/docker/nginx/html/:/usr/share/nginx/html/ 
        -v /home/app/docker/nginx/conf/sites-enabled/:/etc/nginx/conf.d/ 
        nginx

因为配置nginx主要是两个方面:1.项目的目录,2.nginx的配置文件,所以,为了方便,需要做映射,上面的每个参数-v都是映射,将本机的目录映射到虚拟机内,而且每次修改文件要重新创建才起作用,如果要进入虚拟机的脚本,运行命令docker exec nginx_server bash就可进入交互页面.启动或者停止容器,只要用名子运行就可以了docker ngixn_server start/stop


五 dockerhub的push上云端

dockerhubgithub一样,可以把自己的环境镜像推送上去保存.重点是,它保存的是镜像,就是软件运行的环境,而不是代码,只是环境
首先得有一个dockerhub的账号: docker镜像仓库链接.
之后,在命令行输入:

docker login

登录后,比如我的镜像是nginx,那么,我先制作标签

# docker tag image:tag [本地源镜像] user_name/image_name:tag
# 作用从一个源头镜像是生成自己的镜像版本在本地,设定自己的仓库,以方便推,nginx的直接推是不行的,会得到deny回应
docker tag nginx:lasted username/image_name:v1

之后推送镜像【这个需要注意下,本地的项目名字和远程的必须一致】

docker push username/image_name

就可以吧项目推送到dockerhub的仓库中供给到处使用了

经过实际的测试,我的ubuntu的docker镜像是18.04的,我的linux系统是16.04的,我在docker镜像里面安装了依赖和一些软件.当我push上dockerhub,然后,我在centos6.5拉下来,我的镜像无法运行,报错:fatal:kernal too old,就是核心组件太老,无法支持我的镜像了.在ubuntu16.04上拉下来之后,是可以正常使用的.


六 docker容器生成新镜像在本地

# 在本地生成新镜像,生成后用docker images可以查看到
docker commit -a "user statement" -m "project statement"  
container_id username/image_name:tag

七 little cookies

有的东西不好归类,在此处说明

  1. 给已经在容器里面run着的镜像添加端口
    没看到有啥子方法能够补充添加的,能做的都只是要关闭容器,删除容器,重新run起来一个镜像,在run 的时候规定,如果容器里面安装了很多程序,可就麻烦了,只能转化一下思路了,思路就是:先把这个容器做成一个镜像,然后就保存了此个容器的状态在一个image中,然后,再重新运行这个image,顺便增加端口.删除原来的容器和镜像即可

相关操作在不同的系统,不同的版本会有一些区别,不过总体的思路是不变的。只能看着思路,遇到时候总结出新了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容