docker之安装和基本使用(一)

时间:2021-01-16 20:47:28

前言

开始折腾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-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

参考: