docker之安装和基本使用(一)
前言
开始折腾docker。
主要概念
容器:独立运行的一个或一组应用,与其他应用完全独立。
镜像:用于创建 Docker容器的模板。
仓库:用于收纳镜像文件,可以理解为代码控制中的代码仓库
注意:
一个docker容器应该被看做是一个进程而不是一台虚拟机,因为所有的docker中的应用其实是运行在宿主机上的,你可以通过ps查看它们,区别是它们被隔离成独立的,没有联系的应用;所以docker部署的一般用法是在一个docker中只部署一个应用,如一个nginx。
安装docker
- 可以使用apt安装docker,但安装的不是最新的,如果是云服务可以这样做;
sudo apt-get install docker
或
sudo apt-get install docker-ce
- 使用阿里源安装最新docker
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo apt-get -y update
sudo apt-get -y install docker-ce
- 使用repo
#安装所需要的包
sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
# 添加使用 HTTPS 传输的软件包以及 CA 证书
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
#添加GPG密钥
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
# 添加软件源
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
# 添加成功后更新软件包缓存
sudo apt-get update
# 安装docker
sudo apt-get install docker-engine
# 启动 docker
sudo systemctl enable docker
sudo systemctl start docker
- 可以使用官方的方法安装docker-ce,但是由于网络的问题,https://docs.docker.com很难访问,需要翻墙。
注意: docker-engine和docker-ce只是不同的docker版本。
镜像加速
- 国内网络导致后续拉取 Docker 镜像十分缓慢,需要修改镜像源。
cd /etc/docker/
touch daemon.json # 创建该文件
chmod 644 daemon.json
vi daemon.json
# 设置镜像源
{
"registry-mirrors": ["http://hub-mirror.c.163.com", "https://registry.docker-cn.com"]
}
- 设置完毕后需要重启docker使得配置生效。
sudo systemctl daemon-reload
sudo systemctl restart docker
注册docker云账号,创建自己的仓库
可以去hub.docker.com注册,但是国内的网络需要翻墙才能注册成功。
国内如阿里云等也提供docker云服务,注册一个;
# 网址:https://dev.aliyun.com/search.html
点击管理中心,如果还没有阿里云账号先注册账号,有会要求设置登录docker仓库的密码
点击镜像加速器可以看到专用的加速地址,将其加入到daemon.json文件中
创建镜像仓库的命名空间
网址:https://cr.console.aliyun.com/?spm=5176.1971733.0.2.duOGn4#/namespace/index
- 创建一个镜像仓库
网址:https://cr.console.aliyun.com/?spm=5176.1971733.0.2.duOGn4#/imageList
镜像仓库可以和代码仓库关联起来。从而实现自动构建镜像,现在我们只创建一个本地镜像私有仓库
完成后可以看到仓库地址,点击管理里面有详细的信息和操作指南。
# 登录阿里云docker registry:
$ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
# 从registry中拉取镜像:
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号]
# 将镜像推送到registry:
$ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com # 先登录
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] # 标记镜像文件
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] # 推送
docker客户端的一些基本的命令
docker run :创建一个新的容器并运行一个命令
参数:
-p: 端口映射,格式为:主机(宿主)端口:容器端口, 如-p 27018:27017
-d: 后台运行容器,并返回容器ID;
-v:目录映射,格式为:主机(宿主):容器, 如-v /var/data/db:/data/db 这样对容器的/data/db的操作会反应在主机的/var/data/db目录中
-P: 直接将容器的端口映射主机的端口,不需要参数
--name:指定创建的容器的名字,
--restart:设置容器的重启策略;
# 例:使用mongo:latest镜像创建一个容器,如果后面没有额外的命令则使用构建镜像时默认的启动命令,如果有则使用输入的命令
docker run -p 27018:27017 -v $PWD/db:/data/db -d --name mongodb mongo:latest
# 基本命令
docker start :启动一个或多少已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器
docker kill :杀掉一个运行中的容器。
docker rm :删除一个或多少容器
docker create :创建一个新的容器但不启动它
docker exec :在运行的容器中执行命令
docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
docker ps -a : 查看创建的容器列表,-a指的是左右的容器。无论是运行或不运行的,-l指的是最新的;
docker top : 查看容器内的所有进程
docker port : 快速查看端口的映射情况
# 镜像管理
docker login -u 用户名 -p 密码 #登录一个镜像仓库
docker logout # 登出
docker pull : 从镜像仓库中拉取或者更新指定镜像
docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker search : 从Docker Hub查找镜像
# 本地镜像管理
docker images : 列出本地镜像文件列表。
# 使用REPOSITORY:TAG,即仓库源:标签来定义不同的镜像
docker rmi : 删除本地一个或多少镜像。使用id删除
本地镜像存放的位置:/var/lib/docker
docker的基本使用
- 比如说我们想使用docker运行nginx服务
# 查看本机已有的镜像,发现没有nginx的镜像
docker images # 使用REPOSITORY:TAG,即仓库源:标签来定义不同的镜像
# 先去hub查找合适的nginx镜像
docker search nginx
# 找到一个合适的拉取到本地
docker pull nginx:3.4 # 默认拉取的是latest,可以通过nginx:3.4的方式指定是3.4版本
# 运行
docker run --name mynginx -p 80:80 -d nginx:3.4
或
docker run --name mynginx -p 80:80 -d nginx:3.4 nginx # 后面的nginx是启动命令
# 测试
使用http://ip+port访问
制作docker镜像
如果拉取的镜像环境不满足我们的要求,我们可以先拉取然后改造成我们自己的镜像。
从已经创建的容器中更新镜像,并且提交这个镜像
- 当一个容器被创建并运行后,我们需要进入这个容器
docker exec
参数:
-d :分离模式: 在后台运行
-i :交互模式
-t :分配一个伪终端
# 进入容器打开一个交互终端
docker exec -i -t (容器的ID/names) /bin/bash
# 退出容器
exit
进入后到/根目录,可以发现容器的目录和linux操作系统的目录差不多,但这些都是虚拟的目录。
更改容器
# 进入容器更新
apt-get update
# 安装vim
apt install vim
# 现在这个容器相当于被我们改造了,为它提交一个副本
exit # 先退出容器
docker commit -m="install a vim" -a="cwp" (容器的id) (新的镜像文件的名字)
# commit命令的参数:
-m:提交的描述信息
-a:指定镜像作者
镜像文件命名规则:abc:def # abc会变成REPOSITORY部分,def变成TAG部分
# 查看我们的镜像列表
docker images
# 将我们的镜像推送到阿里云仓库
$ sudo docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com # 先登录
# 标记镜像文件,即创建一个链接,用来描述该镜像是属于哪一个仓库的
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/命名空间/仓库:[镜像版本号] # 推送
# 在镜像版本中可以查看推送的镜像文件
使用 Dockerfile 指令来创建一个新的镜像
- 使用 Dockerfile是创建一个全新的镜像。
touch Dockerfile
# 编辑
vi Dockerfile
- 一个一般的Dockerfile的文件的格式
#所有的命令都需要大写
FROM ubuntu:16.04 # 说明docker是基于linux版本构建的
MAINTAINER cwp "13926902570@163.com" # 说明维护者和邮箱
# 在linux系统中运行一些命令
ADD sources.list /etc/apt/sources.list # 复制本地的apt源到docker的apt源中
RUN apt-get update # 更新apt
RUN apt install xxx # 安装你想制作镜像的的应用
EXPOSE 22 # 设置开放的端口
EXPOSE 80
CMD /usr/sbin/sshd -D # 设置容器运行时自动执行的命令,只能有一条,多个的话执行最后一条
注意: 使用ADD时最好把需要复制的文件放置在dockerfile文件的同一目录下,防止找不到文件;
- 完毕后创建镜像
docker build -t test:v1 /home/ # 指定tag和dockerfile文件所在的目录
#只有出现Successfully的字样才算是创建成功
- 查看创建的镜像
docker images
参考:
docker之安装和基本使用(一)的更多相关文章
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- docker 启动安装等命令
确认是否安装url whereis curl 启动docker服务: sudo service docker start sudo service docker stop 安装curl sudo ap ...
- DOCKER windows安装
DOCKER windows安装 1.下载程序包 2. 设置环境变量 3. 启动DOCKERT 4. 分析start.sh 5. 利用SSH工具管理 6. 下载镜像 6.1 下载地址 6.2 用FTP ...
- 在docker里面安装部署应用
最近一直在做docker的安装打包工作,学到不少东西,在博客里记一下. 环境centos6 ,docker 基础镜象centos6 1.创建本地基础镜象,安装基础命令包 (1)Dockerfile,D ...
- Docker Centos安装Redis以及问题处理
之前一篇文章 Redis安装及主从配置 介绍了redis的安装配置,另一篇文件介绍了 Docker Centos安装Openssh .今天将两篇文件结合一下——在Docker Centos环境下搭建r ...
- Docker Centos安装Mysql5.6
之前一篇随笔<Docker Centos安装Openssh> 写的是如何在基础的centos镜像中搭建ssh服务,在此基础上再搭建其他服务.本文继续介绍在centos_ssh基础上搭建my ...
- Docker的安装及简单使用
1. Docker的安装 (这里的“安装docker”其实就是安装Docker Engine) $ sudo apt-get intasll docker.io note: apt-get是ubun ...
- docker 的安装
官方站点上有各种环境下的 安装指南,这里主要介绍下Ubuntu和CentOS系列的安装. Ubuntu 系列安装 Docker 通过系统自带包安装 Ubuntu 14.04 版本号系统中已经自带了 D ...
- docker 17 安装
docker17 安装 新增一键安装命令: curl -sSL https://get.docker.com/ | sh 以下为手动安装过程 翻译自 Get Docker for Ubuntu Doc ...
- centos7安装docker并安装jdk和tomcat(常用命令)
阿里专属的镜像加速 在宿主机器编辑文件:vi /etc/docker/daemon.json 阿里专属的镜像加速地址,类似于"https://91cntlkt.mirror.aliyuncs ...
随机推荐
- hdu3507 Print Article(斜率优化入门)(pascal)
Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique, he s ...
- 深入理解JVM一java堆分析
上一节介绍了针对JVM的监控工具,包括JPS可以查看当前所有的java进程,jstack查看线程栈可以帮助你分析是否有死锁等情况,jmap可以导出java堆文件在MAT工具上进行分析等等.这些工具都非 ...
- [洛谷P5137]polynomial
题目大意:求:$$\sum\limits_{i=0}^na^{n-i}b^i\pmod{p}$$$T(T\leqslant10^5)$组数据,$a,b,n,p\leqslant10^{18}$ 题解 ...
- 【BZOJ2151】种树(贪心)
[BZOJ2151]种树(贪心) 题面 BZOJ 题解 如果没有相邻不能选的限制,那么这就是一道傻逼题. 只需要用一个堆维护一下就好了. 现在加上了相邻点的限制,那么我们就对于当前位置加入一个撤销操作 ...
- 常用Actoin算子 与 内存管理 、共享变量、内存机制
一.常用Actoin算子 (reduce .collect .count .take .saveAsTextFile . countByKey .foreach ) collect:从集群中将所有的计 ...
- Java之面向对象编程20170619
/*************************************************************************************************** ...
- Linux遇到的两个问题
编译C++的和编译C语言的命令不同. 编译C++,应当先安装g++. 然后可以用#g++ filename.cpp -o filename 进行编译 编译C语言是用#gcc filename.c -o ...
- 「Linux+Django」uwsgi服务启动(start)停止(stop)重新装载(reload)
转自:http://blog.51cto.com/12482328/2087535?cid=702003 1. 添加uwsgi相关文件 在之前的文章跟讲到过centos中搭建nginx+uwsgi+f ...
- linux 内存计算
原文: http://www.open-open.com/lib/view/open1424325362577.html Linux中的Cache Memory 什么是Cache Memory(缓存内 ...
- 使用cron命令配置定时任务(cron jobs)
原文 http://www.cnblogs.com/end/archive/2012/02/21/2361741.html 开机就启动cron进程的设置命令:chkconfig --add crond ...