docker安装及基础

docker的安装

  • 下载docker-ce(社区版)的yum地址
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
  • 替换为清华源地址,加快安装速度
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
  • 执行yum安装命令进行安装
[root@docker ~]# yum install docker-ce -y
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
..................................................
已安装:
  docker-ce.x86_64 3:18.09.7-3.el7                                   

作为依赖被安装:
  audit-libs-python.x86_64 0:2.8.4-4.el7                             
  checkpolicy.x86_64 0:2.5-8.el7                                     
  container-selinux.noarch 2:2.99-1.el7_6                            
  containerd.io.x86_64 0:1.2.6-3.3.el7                               
  docker-ce-cli.x86_64 1:18.09.7-3.el7                               
  libcgroup.x86_64 0:0.41-20.el7                                     
  libsemanage-python.x86_64 0:2.5-14.el7                             
  policycoreutils-python.x86_64 0:2.5-29.el7_6.1                     
  python-IPy.noarch 0:0.75-6.el7                                     
  setools-libs.x86_64 0:3.3.8-4.el7                                  

作为依赖被升级:
  policycoreutils.x86_64 0:2.5-29.el7_6.1                            

完毕!
  • 执行docker wersion查看情况
[root@docker10 ~]# docker version 
Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        2d0083d
 Built:             Thu Jun 27 17:56:06 2019
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? #发现报错
  • 启动docker并设置成开机自启动
[root@docker10 ~]# systemctl start docker
[root@docker10 ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

启动后发现命令无法补全,先确认已安装bash-completion,然后执行source /usr/share/bash-completion/bash_completion,发现按TAB键可以完成命令补全

  • 重新执行docker version
[root@docker10 ~]# docker version 
Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        2d0083d
 Built:             Thu Jun 27 17:56:06 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.7
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       2d0083d
  Built:            Thu Jun 27 17:26:28 2019
  OS/Arch:          linux/amd64
  Experimental:     false

docker为客户端服务端共用的cs架构

  • docker系统下的命令
[root@docker10 ~]# docker system 
df      events  info    prune   

docker system

系统命令 说明 译文
df Show docker disk usage 硬盘资源
events Get real time events from the server 从服务器获取实时事件
info Display system-wide information 显示整个系统的信息
prune Remove unused data 删除未使用的数据

prune 批量删除

docker容器的主要组件:
镜像 容器 仓库 网络 存储(卷)
启动容器必须需要一个镜像,仓库中只存储镜像
容器---镜像---仓库

启动第一个容器

配置docker镜像加速

vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   

重启服务,使文件生效

[root@docker ~]# systemctl restart docker

启动一个nginx容器(先确保仓库内存在nginx才能启动,如果没有,可在接下来的步骤中直接pull一个)

docker run -d -p 80:80 nginx
[root@docker ~]# docker run -d -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
fc7181108d40: Pull complete 
d2e987ca2267: Pull complete 
0b760b431b11: Pull complete 
Digest: sha256:96fb261b66270b900ea5a2c17a26abbfabe95506e73c3a3c65869a6dbe83223a
Status: Downloaded newer image for nginx:latest
fb7a6bccf23d8721a41f9f8808ade14b65e27ed5985d688fdd8567b054d4799c

run #(创建并运行一个容器)
-d #放在后台
-p #端口映射
nginx #docker镜像的名字
本地并未安装运行nginx,但通过容器可直接访问nginx


image.png

docker的镜像管理

  • 1.搜索镜像
    docker search (接镜像)
  • 2.获取镜像
    docker pull(push)

镜像加速器:阿里云加速器,daocloud加速器,中科大加速器,Docker 中国官方镜像加速:https://registry.docker-cn.com
阿里云加速器:https://ii37ukg5.mirror.aliyuncs.com
(通过加速器可加快pull镜像的时间)
下载一个centos6.8镜像

[root@docker ~]# docker pull centos:6.8
6.8: Pulling from library/centos
7ce0cebb9dca: Pull complete 
Digest: sha256:39abd0c8e375de6fb7334d42ec2a46643f34cbc1bbaf37e2b484065f05eaa7a2
Status: Downloaded newer image for centos:6.8
  • 3.查看镜像列表
    docker images docker image ls
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f68d6e55e065        4 days ago          109MB
centos              6.8                 82f3b5f3c58f        3 months ago        195MB
  • 4.删除镜像
    docker rmi
[root@docker ~]# docker image rm centos:6.8 
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f68d6e55e065        4 days ago          109MB

例子:docker image rm centos:latest

  • 5.导出镜像
    docker save
[root@docker ~]# docker image save -o docker_nginx.tar.gz nginx:latest 
#save 另存为 #-o 指定当前目录 docker_nginx.tar.gz 压缩包 nginx:latest 版本号
[root@docker ~]# ll
总用量 110444
-rw-------. 1 root root      1519 7月   4 16:31 anaconda-ks.cfg
-rw-------. 1 root root 113087488 7月   6 11:58 docker_nginx.tar.gz

第二种方法:docker image save centos > docker-centos7.4.tar.gz

  • 6.导入镜像
    docker load
[root@docker ~]# docker image load -i docker_centos.tar.gz 
# load -i指定镜像路径
ad337ac82f03: Loading layer [==================================================>]  202.2MB/202.2MB
Loaded image: centos:6.8
[root@docker ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              f68d6e55e065        4 days ago          109MB
centos              6.8                 82f3b5f3c58f        3 months ago        195MB

例子:docker image load -i docker-centos7.4.tar.gz

docker容器的管理

docker 容器下的命令:

docker container

系统命令 说明 译文
attach Attach local standard input, output, and error streams to a running container 重新进入运行的容器中
commit Create a new image from a container's changes 根据容器的更改创建新镜像
cp Copy files/folders between a container and the local filesystem 在容器和本地文件系统之间复制文件/文件夹
create Create a new container 创建一个新的容器
diff Inspect changes to files or directories on a container's filesystem 检查容器文件系统中文件或目录的更改
exec Run a command in a running container 在正在运行的容器中运行命令
export Export a container's filesystem as a tar archive 将容器的文件系统导出为tar归档文件
inspect Display detailed information on one or more containers 在一个或多个容器上显示详细信息
kill Kill one or more running containers 杀死一个或多个正在运行的容器
logs Fetch the logs of a container 获取容器的日志
ls List containers 列出容器列表
pause Pause all processes within one or more containers 暂停一个或多个容器中的所有进程
port List port mappings or a specific mapping for the container 列出端口映射或容器的特定映射
prune Remove all stopped containers 移除所有已停止的容器
rename Rename a container 改名
restart Restart one or more containers 重启
rm Remove one or more containers 删除
run Run a command in a new container 运行
start Start one or more stopped containers 启动
stats Display a live stream of container(s) resource usage statistics 显示容器资源使用统计信息
stop Stop one or more running containers 停止一个或多个正在运行的容器
top Display the running processes of a container 显示容器的运行进程
unpause Unpause all processes within one or more containers 在一个或多个容器中暂停所有进程
update Update configuration of one or more containers 更新一个或多个容器的配置
wait Block until one or more containers stop, then print their exit codes 阻塞,直到一个或多个容器停止,然后打印它们的退出代码
  • 1.启动一个容器
    docker run (docker create + docker start)
[root@docker ~]# docker run -it --name wsm centos:6.8 /bin/bash

run(创建并运行一个容器)
-d 放在后台
-p 端口映射
-it 分配交互式的终端
--name 指定容器的名字
/bin/sh 覆盖容器的初始命令

    1. 显示容器列表
      docker container ps
      docker container ps -a (--all)
[root@docker ~]# docker container ps --all
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                        PORTS                NAMES
d21722d07317        centos:6.8          "/bin/bash"              About a minute ago   Exited (130) 24 seconds ago                        wsm
fb7a6bccf23d        nginx               "nginx -g 'daemon of…"   About an hour ago    Up About an hour              0.0.0.0:80->80/tcp   reverent_shannon
  • 3.停止容器
    docker container stop
[root@docker ~]# docker container stop fb7a6bccf23d
fb7a6bccf23d
  • 4.杀掉容器
    docker container kill
[root@docker ~]# docker container kill fb7a6bccf23d
fb7a6bccf23d
  • 5.进入容器

docker container exec (会分配一个新的终端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)

docker container attach(使用同一个终端) 使用ctrl + p,ctrl + q 临时离开
docker attach [OPTIONS] CONTAINER

  • 6.删除容器
    docker container rm
  • 7.批量删除容器
    docker rm -f `docker ps -a -q`

总结:docker容器内的第一个进程(初始命令)必须一直处于前台运行的状态(必须夯住),否则这个容器,就会处于退出状态!

docker端口映射

  • 1.指定映射(docker 会自动添加一条iptables规则来实现端口映射)
    -p hostPort:containerPort
    -p ip:hostPort:containerPort 多个容器都想使用80端口
    -p ip::containerPort(随机端口)
    -p hostPort:containerPort:udp
    -p 10.0.0.100::53:udp
    -p 81:80 –p 443:443 可以指定多个-p

  • 2.随机映射
    docker run -P (随机端口)

docker数据卷管理

作用:
容器的持久化
容器之间能实现数据共享

添加后的数据卷内数据与主机同步,即使容器停掉我们修改宿主机内的卷也可同步到容器内,重新开启并进入容器内便可查看宿主机上对卷的修改操作

直接命令添加数据卷
docker run -it -v /宿主机内绝对路径目录:/容器内目录 镜像名称 /bin/bash(如果报错加上试试)

使用dockerfile添加
--volumes -v
数据卷(文件或目录)
-v 卷名:/data
-v src(宿主机的目录):dst(容器的目录)

手动将容器保存为镜像

基于容器制作镜像
  • 1.选择系统并安装服务
[root@docker ~]# docker run -it -p 1022:22 centos:6.9
[root@195ebf39117c /]# yum install -y openssh-server    #安装ssh
[root@195ebf39117c /]# service sshd start      #C6启动服务命令
Generating SSH2 RSA host key:                              [  OK  ]
Generating SSH1 RSA host key:                              [  OK  ]
Generating SSH2 DSA host key:                              [  OK  ]
Starting sshd:    
[root@195ebf39117c /]# echo 123456|passwd --stdin root #设置密码
Changing password for user root.
passwd: all authentication tokens updated successfully.
  • 2.测试安装的服务可使用
image.png
  • 3.提交为镜像
    docker container commit 容器id或者容器的名字 新的镜像名字(版本号可选)
[root@docker ~]# docker container commit c8d569e8c58b centos6.9_ssh:v1
sha256:3b3df71e3b7320dfdb12916554f1333e45c6a2c337115ca0bbf9d730fbfec6ad
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos6.9_ssh       v1                  3b3df71e3b73        24 seconds ago      195MB   #新提交的镜像
nginx               latest              f68d6e55e065        4 days ago          109MB
centos              6.8                 82f3b5f3c58f        3 months ago        195MB
centos              6.9                 2199b8eb8390        3 months ago        195MB

**注意:docker container commit 下镜像名称内不能包含大写字母,不能存在俩个:否则会报错!

[root@docker ~]# docker container commit c8d569e8c58b centos:6.9_ssh:v1
invalid reference format
  • 4.测试镜像是否可使用

启动容器,容器正常运行
ssh 容器服务要持续运行,需在启动容器时添加/usr/sbin/sshd -D 使容器夯住才能保证容器启动运行

[root@docker01 ~]# docker run -d -p 1023:22 centos6.9_ssh:v1 /usr/sbin/sshd -D
48fe2e6d88f663488510ed5587b44fa550e4daafbce83c3bd75c43aa0fd2ebf9

注意:容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work.错

[root@docker01 ~]# docker run -d -p 1023:22 centos6.9_ssh:v1 /usr/sbin/sshd -D
WARNING: IPv4 forwarding is disabled. Networking will not work.
5a92a182868008cf52d2c8ac6be85a040e8ff58f7b4e53e0d3b27dcb3d203d53

解决方法

  • 1.修改 /usr/lib/sysctl.d/00-system.conf文件
    添加net.ipv4.ip_forward=1代码至文件中
[root@docker01 ~]# vim  /usr/lib/sysctl.d/00-system.conf
# Kernel sysctl configuration file
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl(8) and
# sysctl.conf(5) for more details.

# Disable netfilter on bridges.
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
net.ipv4.ip_forward=1
  • 2.重启网络
    systemctl restart network
  • 3.重启docker服务
    systemctl restart docker
  • 4.删除报错的容器,再次创建容器,便不会报错

此脚本为万能启动容器夯住的脚本,在启动容器时在后面执行脚本
vim init.sh

# /bin/bash
正常启动服务的命令
tail -F

思维导图

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

推荐阅读更多精彩内容

  • 前面几篇文章讲了那么多似乎和Docker无关的实战操作,本篇总算开始说到Docker了。 1、关于Docker 1...
    檀布施阅读 2,572评论 0 9
  • 1、关于Docker 1.1、什么是Docker Docker概念就是大概了解一下就可以,还是引用一下百度百科吧:...
    曾尚阅读 1,542评论 0 0
  • 1、关于Docker 1.1、什么是Docker Docker概念就是大概了解一下就可以,还是引用一下百度百科吧:...
    __元昊__阅读 359评论 0 5
  • 任性起来 谁都阻止不了~ 但昨晚上了半小时课,嗯,明白自己是多幼稚 喜欢,不是说说,不是以为,而是行动 或许真的是...
    桌子和1106阅读 109评论 0 0
  • 虽说冬天来了,春天还会远吗?可冬天还是这个冬天,依旧天寒地冻。周而复始,何时是尽头? 天冷不算什么,人心冷...
    陈典亮阅读 201评论 0 0