docker 常用操作

linux 查看系统版本确认使用的docker版本

uname -a --查看Linux内核版本命令
cat /proc/version
Linux localhost.localdomain 3.10.0-693.2.2.el7.x86_64 #1 SMP Tue Sep 12 22:26:13 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

lsb_release -a --查看Linux系统版本的命令
cat /etc/redhat-release,这种方法只适合Redhat系的Linux:

free -- 查看内存
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是434884KB,已用内存是3489800KB,
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。

docker基本概念

Docker: 开源的容器虚拟化平台,虚拟机能做的Docker都能做,而且速度更快。
    Docker的核心思想有三点:
集装箱,将一个个程序(应用)看作集装箱,在网络间进行搬运,Docker中的集装箱也就是镜像
标准化,将程序所需的环境进行标准化
隔离,集装箱直接互相隔离
    在对Docker有一个大概的认识后再来看Docker的内部:
      Docker 镜像 - Docker images
      Docker 仓库 - Docker registeries
      Docker 容器 - Docker containers
镜像就是一系列的文件,每一层的镜像都是只读的,仓库是用来保存镜像的,容器的本质是进程,镜像可以理解为容器的文件系统,一个Docker容包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。

install docker

Install required packages.

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

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

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

yum install docker-ce-17.06.1.ce

systemctl start docker -- 启动docker
docker run hello-world -- 运行第一个镜像确认docker 安装正常
service docker start - docker 启动
service docker stop - docker 关闭

docker基础使用

1.docker 镜像创建
docker pull hub.c.163.com/library/mysql:5.7.18 – 获取镜像
docker images - 查看镜像(镜像id)
docker tag mysql:latest tmysql:5.7 – 添加镜像标签
docker rmi –f images_id – 删除镜像 (-f 强制删除镜像)

2.docker 容器的创建
docker run --name tmysql -v /home/dly:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d images_id – 创建并启动容器,同时有挂载配置文件,注意/home/dly权限。
docker run --name ttpostgres -p 5433:5432 -e POSTGRES_PASSWORD=123456 -v /home/dly:/var/lib/postgresql -d postgres:9.6
docker start container – 启动容器
docker stop container – 关闭容器
docker ps –a - 查看容器
docker exec -it container_id /bin/bash – 进入容器
docker inspect tmysql – 查看容器的元数据

website
3.docker 信息查看

  • history用于确认image的履历信息. 用于刨根问底确认这个images最近都改了什么非常有效
    docker history image_name

  • info用于确认当前docker的系统信息,包括
    容器相关:个数/状态
    Server版本号
    Storage driver及详细信息
    Logging driver格式
    Kernel版本
    OS类型
    当前机器的硬件信息
    docker info

  • port 是为了确认port的mapping状况,需要container在live的状态才能确认到port情况
    docker port container_id

  • search default的情况下搜索dockerhub上的镜像信息
    example: docker search image_name

  • stats 获取实时的container的资源用量的统计信息, 会不断自动刷新
    dokcer stats

  • top 列出容器实际的进程详细信息
    docker top container_id

  • save 将镜像文件保存为一个archive文件
    docker save busybox >busybox.tar

  • load 是save的反向操作,将save的文件load成为docker管理的镜像。
    docker load busybox.tar

diff -Inspect changes on a container’s filesystem
exec -Run a command in a running container
export -Export a container’s filesystem as a tar archive
import -Import the contents from a tarball to create a filesystem image
kill -Kill one or more running containers
pause -Pause all processes within one or more containers
rename -Rename a container

3.通过已有的容器创建镜像 存出和载入
docker ps – 查看备份容器的container_id
docker commit -p container_id container-backup - 使用 docker commit 命令来创建快照,生成一个作为Docker镜像的容器快照,
docker images – 查看是否生成镜像
-- # docker tag a25ddfec4d2a arunpyasi/container-backup:test
docker save -o ~/container-backup.tar container-backup - 作为tar包备份。
ls – 查看tar包是否存在。
scp –r ~/ container-backup.tar root@10.2.0.3:/home/dly - 服务器迁移
docker load -i ~/container-backup.tar- 加载该Docker镜像了。
docker images -查看是否镜像下载
docker run -d -p 3306:3306 –-name tmysql container-backup - 运行Docker容器。
docker exec –it contain_id /bin/bash –进入容器

  1. 通过已有的数据卷容器的存出和载入
    备份
    docker run –it –v /var/lib/mysql –name tmysql image_id - 创建一个带有数据卷的容器.

导入数据

docker run --volumes-from container_name -v $(pwd):/backup images_id tar cvf /backup/backup.tar /var/lib/mysql
docker run --volumes-from container_name -v $(pwd):/backup images_id tar cvf /backup/backup.tar /var/lib/postgresql/data

--利用数据卷容器备份,使用 –volumes-from 标记来创建一个加载 data 容器卷的容器,并从主机挂载当前目录到容器的 /backup 目录。容器启动后,在当前目录下生成的backup.tar 文件就是data容器卷的备份文件.
恢复
docker run --name tmysql -p 3306:3306 -v /home/dly:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d image_id -创建一个带有空数据卷的容器 这个镜像自动带有数据卷,i是打开容器中的stdin,t是为容器分配一个伪终端.这里的d是后台运行,并打印容器ID容器,容器运行 。
docker run --volumes-from contain_name -v $(pwd):/backup image_id tar xvf /backup/backup.tar
重启docker

测试环境搭建—postgresql
源文件服务器
apt-get update
apt-get install ssh – 安装ssh

apt-get install vim-gtk – 安装vim

su – postgress
pg_dumpall | ssh root@10.0.0.96 'cat > /var/pgbackup/db.out' – 目录存在
目标文件服务器-- /var/lib/postgresql/data
docker run --name ttpostgres2 -p 5410:5432 -e POSTGRES_PASSWORD=123456 -v /var:/var/lib/postgresql -d postgres_vim:9.6 - 启动容器挂载
Docker ps
docker exec –it ttpostgres2 /bin/bash –进入容器

Vim var/lib/postgresql.sql i-> Esc ->:wq(保存退出) ,:q!(不保存退出)
su – postgres – 切换超级用户
cd /var/lib/postgresql - 进入目标路径
psql -f db.out postgres
Postgresql 数据表导入导出
1.导出
pg_dump -U postgres(用户名) (-t 表名) 数据库名(缺省时同用户名) > 路径/文件名.sql
postgres@debian:~$ pg_dump -U postgres -t system_calls wangye > ./test.sql
2.导入
$ createdb newdatabase
$ psql -d newdatabase -U postgres -f mydatabase.sql // sql 文件在当前路径下

$ psql -d databaename(数据库名) -U username(用户名) -f < 路径/文件名.sql // sql 文件不在当前路径下
$ su postgres #切换到psql用户下
$ psql -d wangye -U postgres -f system_calls.sql # sql 文件在当前路径下

DOCKER registry create docker 私用仓库创建,可以存储镜像

docker pull hub.c.163.com/library/registry:latest -- 从公网的镜像仓库下载镜像
docker tag hub.c.163.com/library/registry:latest registry:2.6 -- 重新标记镜像

docker run -d -p 5000:5000 --restart always -v /home/registry:/tmp/registry --name registry registry:2.6
docker 搭建私有registry
docker server gave HTTP response to HTTPS client 问题处理办法
解决方案

在/etc/docker下,创建daemon.json文件,写入:
{"insecure-registries":["172.17.0.2:5000"]}

重启docker:
systemctl restart docker.service

重新启动registry: 不需要 --restart=always

或者修改vim /lib/systemd/system/docker.service
编辑内容如下:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/docker -d $OPTIONS -H fd:// --selinux-enabled=false --graph=/mnt/docker --insecure-registry=10.132.166.67:5000 --registry-mirror=https://xxxx.mirror.aliyuncs.com --cluster-advertise=172.16.120.144:2375 --cluster-store=etcd://127.0.0.1:2379
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
MountFlags=slave

[Install]
WantedBy=multi-user.target

selinux-enabled是否开启selinux功能
graph指定docker的工作目录
insecure-registry指定docker registry的地址
registry-mirror指定docker加速器地址,进入https://dev.aliyun.com申请docker镜像加速器
cluster-advertise指定docker主机在swarm集群中的位置
cluster-store指定swarm集群存储,可以使用etcd/consul等
如果不使用swarm集群cluster-advertise和cluster-store可以不用配置

验证registry是否可用

docker pull hello-world
docker tag 172.17.0.2:5000/hello-world
docker push 172.17.0.2:5000/hello-world
docker rim -f hello-world
docker pull 172.17.0.2:5000/hello-world --从私有仓库下载镜像

registry的V2 不可使用docker search,查看私用仓库镜像
curl http://172.17.0.2:5000/v2/_catalog
curl http://172.17.0.2:5000/v2/hello-world/tags/list

curl http://10.2.0.16:5000/v2/_catalog

docker开机自启动容器

使用restart policy:在使用docker run启动容器时通过--restart标志指定,这个标志有多个value可选,不同的value有不同的行为,如下表所列:
no不自动重启容器. (默认value)
on-failure 容器发生error而退出(容器退出状态不为0)重启容器
unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
always 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
要让docker 的容器自动在开机启动,docker run 指令中加入 --restart=always 就行。
sudo docker run --restart=always .....
如果创建时未指定 --restart=always ,可通过update 命令设置
docker update --restart=always xxx

docker 设置固定ip

docker容器每当重新启动时,ip和host都会发生变化,有时安装的软件需要绑定Docker局域网中的其他容器,如 MongoDB 副本集部署的时候,就需要绑定其他容器的内网IP。
Docker 默认网络
Docker安装后,默认会创建下面三种网络类型:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local
1252da701e55 host host local
237ea3d5cfbf none null local
启动 Docker的时候,用 --network 参数,可以指定网络类型,如:

bridge:桥接网络
默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了
none:无指定网络
使用 --network=none ,docker 容器就不会分配局域网的IP
host: 主机网络
使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。
创建自定义网络:(设置固定IP)
启动Docker容器的时候,使用默认的网络是不支持指派固定IP的,如下:

~ docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6

docker: Error response from daemon: User specified IP address is supported on user defined networks only.
因此,需要创建自定义网络,下面是具体的步骤:
步骤1: 创建自定义网络
创建自定义网络,并且指定网段:172.18.0.0/16

➜ ~ docker network create --subnet=172.18.0.0/16 mynetwork
➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
9781b1f585ae bridge bridge local
1252da701e55 host host local
4f11ae9c85de mynetwork bridge local
237ea3d5cfbf none null local
步骤2: 创建Docker容器
代码如下:
➜ ~ docker run -itd --name networkTest1 --net mynetwork --ip 172.18.0.2 centos:latest /bin/bash

这个时候,创建的Docker容器就会持有 172.18.0.2 这个IP.

[root@ec8e31938fe7 /]# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:12:00:02
inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe12:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:88 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4056 (3.9 KiB) TX bytes:1068 (1.0 KiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

git 远程库创建

在github.com注册一个用户,并创建一个私用仓库
用户:lydu

git remote add origin git@github.com:lydu/lydu_rep.git --远程库名字origin
git remote -v --view remote

本地仓库创建,其实就是一个存放的文件夹

mkdir git
cd git &&git init -- 在git 文件夹下出现.git 文件
git add test.txt --- 存入缓存
git status -s --view status 缓存区
git config --global user.name "lydu"
git config --global user.email d2012ly@1
3.com
git commit -m "add file test2.txt"
使用git add指令将文件从工作区添加到stage中;
使用git commit指令将stage中的所有内容提交到当前分支。

Warning: Permanently added 'github.com,192.30.253.113' (RSA) to the list of known hosts.
Permission denied (publickey).
解决方案是github上添加一个公钥

git pull origin master
git push origin master
git remote show origin

git checkout -- filename --撤销修改
git reset HEAD README.md #将stage区中的README.md文件撤销回工作区
git rm test.txt --dele 文件
git commit -m"remove test" #提交删除

只用一个命令就可以add所有修改的文件:$git add .

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

推荐阅读更多精彩内容

  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,468评论 0 120
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,734评论 0 7
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,720评论 1 21
  • 0x01 核心概念 Docker镜像类似于虚拟机镜像,可以理解为一个面向Docker引擎的只读模板,包含了文件系统...
    闲云逸心阅读 4,691评论 0 9
  • 喜欢你的人一转身就可以看见,不去珍惜分分钟就会不见
    不让我当淑女是吧阅读 144评论 0 1