docker学习笔记之入门,redis主从前的准备

编程

1、更新update到最新的版本

yum update

2、卸载老版本docker

yum remove docker docker-common docker-selinux docker-engine

3、安装需要的软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

4、设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5、查看docker版本

yum list docker-ce --showduplicates|sort -r

6、安装docker

yum install docker-ce-18.03.1.ce -y

7、启动docker

systemctl start docker

8、加入开机自启

systemctl enable docker

9、配置国内镜像

vi /etc/docker/daemon.json

{

"registry-mirrors": ["http://hub-mirror.c.163.com"]

}

Docker 包括三个基本概念:

镜像(Image)

容器(Container)

仓库(Repository)

 

1.启动

docker start 容器名

2.删除

docker rm 容器名

3.停止所容器

docker stop $(docker ps -a -q)

docker rm $(docker ps -a -q)

4.docker build -t 名称 .

Usage:docker build [OPTIONS] PATH | URL | -

OPTIONS:

-t ,--tag list  #构建后的镜像名称

-f, --file string #指定Dockerfiile文件位置

示例:

1,docker build .

2,docker build -t redis:v1 .

3,docker build -t redis:v2 -f /path/Dockerfile /path

Dockerfile快速入门指令

1.FROM 指定基础镜像

所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个redis镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。

在 Docker Store 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat 等;如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,

如ubuntu 、 debian 、 centos、 alpine 等这些操作系统的软件库

2、RUN 执行命令

RUN 指令是用来执行命令行命令的。

格式:

RUN <command> (类似/bin/sh -cshell格式)

RUN ["executable", "param1", "param2"] (exec格式)

类似shell脚本风格的:

FROM alpine

RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories

RUN apk add gcc g++ libc-dev wget vim openssl-dev make linux-headers

RUN mkdir -p /usr/src/redis

RUN cd /usr/src/redis

RUN wget -O redis-4.0.11.tar.gz "http://download.redis.io/releases/redis-4.0.11.tar.gz"

RUN tar -xzf redis-4.0.11.tar.gz -C /usr/src/redis

RUN cd /usr/src/redis/redis-4.0.11 && make && make PREFIX=/usr/local/redis install

之前说过,Dockerfile 中每一个指令都会建立一层, RUN 也不例外。每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后, commit这一层的修改,构成新的镜像。使用 Dockerfile 定制镜像

而上面的这种写法,创建了很多层镜像。这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错。 这是很多初学

Docker 的人常犯的一个错误。Union FS是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。

 

导出镜像

导出容器可以导出一个已经创建的容器到一个文件,不管容器处于什么状态,可以使用docker export 命令。 命令格式为:docker export [-o|--output[=""]] CONTATINER 其中可以通过-o来指定导出的tar文件名,也可以直接通过重定向来实现。

另一种格式为:docker export 容器id/name >文件名.tar

导入容器

导入的文件可以使用docker import 命令导入变成镜像,该命令的格式为:

docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]

其中-c 选项可以在导入的同时执行对容器进行修改的Dockerfile指令(网络等修改)

另外 docker save&load 命令也可以导入一个镜像存储文件,但是跟docker import 命令是有区别的

 

用export&import 还是 save & load ?

export&import 和 save & load 是docker中的两组命令,我们先主要看看他们的区别:

类型

导出的对象

导出文件大小

是否可回滚到历史层

export & import

将容器导出

save & load

用来将一个或者多个image打包

相对于文件大小来说,save方式导出的文件比export方式导出的文件大

正是因为save方式保存了镜像的历史和层(layer),使其可以层回滚,即回滚到之前的历史层,所以save方式导出的文件稍微大一些

反观export方式,在导出过程中丢失所有的历史,导致其不可以层回滚,导出的文件会小一些

可以通过 docker history 镜像名 看到层关系

3.2、容器网络

Docker安装后,默认会创建下面三种网络类型

docker network ls 查看默认的网络

在启动容器时使用 --network bridge 指定网络类型

bridge:桥接网络

默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了

none:无指定网络 使用 --network=none ,docker 容器就不会分配局域网的IP

host: 主机网络 使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中

3.3、 指定自定义网络

因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段:192.168.1.0/24 并命名为mynetwork,指令

如下:
docker network create --subnet=192.168.1.0/24 mynetwork

使用此docker镜像 创建容器

代码如下:

docker run -itd --name redis-master --net mynetwork -p 6380:6379 --ip 192.168.1.2 redis

参数说明: 具体可以参看一些文档
http://www.runoob.com/docker/docker-run-command.html 

http://www.dockerinfo.net/docker%E5%AE%B9%E5%99%A8-2

-d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; -p: 端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; -V: 为容器挂载目录,比如 /usr/docker/data:/data 前者为数宿主机目录后者为容器内目录 --ip: 为容器制定一个固定的ip --net: 指定网络模式 这样,我们创建了2个容器,来一起查看下结果 docker ps -a 查看容器ip地址 docker network inspect mynetwork

 

docker build -t redis-test . #在文件夹中用默认的Dockerfile创建镜像

docker images #查看当前docker镜像

docker history 625dcdca8ecb #查看某个镜像的历史

docker ps -a #查看当前运行的容器

docker run -itd -p 8001:80 -v xxx1:xxx2 --name redis-master redis-test #使用镜像(redis-test)运行容器(redis-master) 宿主机8001端口映射到容器80端口 宿主机xxx1地址与容器xxx2地址共享(容器写入xxx2的数据同样会出现在宿主机的xxx1里)

docker rm 538265c49277 #移除容器

docker exec -it redis-master bash #进入容器

docker stop $(docker ps -a -q) #停止全部容器(-q 返回容器id)

docker rm $(docker ps -a -q) #移除所有容器

docker rmi $(docker images -q) #删除所有镜像

docker export f4092a93c312 > nginx-jzy.tar #docker export 容器id > 文件名.tar   导出容器(镜像快照)

docker import nginx-jzy.tar nginx-jzy:v2 #使用镜像快照创建镜像,创建的镜像没有history

docker run -itd --name nginx-jzy-v2 e70d288bc4ef bash #使用上面创建的镜像创建容器,这里必须要有bash或者其他可以被挂载的进程

docker save a68a3617e7dd > nginx-jzy-save.tar #保存镜像

docker rmi a68a3617e7dd #删除镜像,因为上面导出容器使用的是这个镜像,所以生成了一个依赖这个镜像的镜像 删除失败了(Error response from daemon: conflict: unable to delete a68a3617e7dd (cannot be forced) - image has dependent child images)

docker image inspect --format="{{.RepoTags}} {{.Id}} {{.Parent}}" $(docker image ls -q --filter since=a68a3617e7dd) #找出from这个镜像的子镜像([nginx-jzy:v2] sha256:e70d288bc4ef3f20015ca839653c1c1555ee7b2524e4085845348c7d990eb998)

docker rmi -f e70d288bc4ef #删除子镜像失败(Error response from daemon: conflict: unable to delete e70d288bc4ef (cannot be forced) - image is being used by running container be7eea6f8a9b)

docker stop be7eea6f8a9b #停止容器

docker rm be7eea6f8a9b #删除容器

docker rmi -f e70d288bc4ef #删除子镜像成功

docker rmi a68a3617e7dd #删除镜像成功

docker load < nginx-jzy-save.tar #读取保存的镜像文件(生成的镜像文件是有history的)

docker inspect imageid #查看镜像详情

 docker network ls #查看网络列表

docker network inspect id1 #查看网络id为id1的信息

docker network create --subnet=192.168.1.0/24 redis-network #新增网络连接方式(增加网段)

docker run -itd --name redis-test2 --network=redis-network --ip 192.168.1.3 -p 6381:6379 -v /usr/docker/redis/conf/:/usr/src/redis/conf/ redis #根据之前的redis镜像生成redis-test2容器 使用自定义的redis-network网络,指定ip(必须在网段内),指定端口映射,指定共享文件夹

 

以上是 docker学习笔记之入门,redis主从前的准备 的全部内容, 来源链接: utcz.com/z/517634.html

回到顶部