初识Docker

很久前就一直想要搭建Docker来玩一玩,不过一直没啥时间去玩,蹭这放假时间,我也赶紧搭了一个来玩一玩

环境声明

Server-10
10.0.10.10
CentOS7.5.1804
最小化安装

初始化系统

相关链接

Docker官网

Docker Hub 官方镜像仓库

软件版本信息

在安装Docker之前,我们先来看下Docker的软件版本信息

[root@server-10 ~]# yum info docker
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
可安装的软件包
名称    :docker
架构    :x86_64
时期       :2
版本    :1.13.1
发布    :63.git94f4240.el7.centos
大小    :16 M
源    :extras/7/x86_64
简介    : Automates deployment of containerized applications
网址    :https://github.com/docker/docker
协议    : ASL 2.0
描述    : Docker is an open-source engine that automates the deployment of any
         : application as a lightweight, portable, self-sufficient container that will
         : run virtually anywhere.
         : 
         : Docker containers can encapsulate any payload, and will run consistently on
         : and between virtually any server. The same container that a developer builds
         : and tests on a laptop will run at scale, in production*, on VMs, bare-metal
         : servers, OpenStack clusters, public instances, or combinations of the above.

安装

[root@server-10 ~]# yum -y install docker

版本信息

[root@server-10 ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: 
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

当我们使用docker命令去查看版本信息的时候,会提示无法链接Dockers的daemon,问你这台主机上有运行daemon吗,所以我们还需要启动

[root@server-10 ~]# systemctl start docker

再来看版本信息

[root@server-10 ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      94f4240/1.13.1
 Built:           Fri May 18 15:44:33 2018
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-63.git94f4240.el7.centos.x86_64
 Go version:      go1.9.4
 Git commit:      94f4240/1.13.1
 Built:           Fri May 18 15:44:33 2018
 OS/Arch:         linux/amd64
 Experimental:    false

当正常启动之后就可以看到客户端和服务端的版本信息了,在这里要注意下,前端使用的版本要跟后端版本一致,因为我这里是直接使用yum安装,所以它会帮我安装前端跟后端,所以版本都回一致。

Docker命令及用法

1、查看当前镜像

命令

docker images

执行结果

[root@server-10 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

2、查看/保存 官方镜像

命令

docker search centos7

执行结果

[root@server-10 ~]# docker search centos7
# 镜像源    镜像名称                            描述                星星(级别)  官方   是否支持自动安装
INDEX       NAME                                DESCRIPTION         STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/ansible/centos7-ansible   Ansible on Centos7   112                 [OK]
docker.io   docker.io/centos/mysql-57-centos7   MySQL 5.7 SQL database server  28

···

docker.io  docker.io/openshift/wildfly-120-centos7   A Centos7 based WildFly v12.0 image for us...   0
docker.io   docker.io/openshift/wildfly-90-centos7   A Centos7 based WildFly v9.0 image for use...   0   [OK]

3、下载镜像

命令

# docker pull [镜像名称]
# 下载:pull  、  上传:push
docker pull docker.io/ansible/centos7-ansible

执行结果

[root@server-10 ~]# docker pull docker.io/ansible/centos7-ansible
Using default tag: latest
Trying to pull repository docker.io/ansible/centos7-ansible ...
latest: Pulling from docker.io/ansible/centos7-ansible
45a2e645736c: Pull complete
1c3acf573616: Pull complete
edcb61e55ccc: Pull complete
cbae31bad30a: Pull complete
aacbdb1e2a62: Pull complete
fdeea4fb835c: Pull complete
Digest: sha256:39eff7d56b96530d014083cd343f7314c23acbd1ecf37eb75a71a2f6584d0b02
Status: Downloaded newer image for docker.io/ansible/centos7-ansible:latest

4、创建容器

命令

# -i以交互模式运行容器(不管什么系统,装完后是命令行还是图形界面,都是交互式)
# -t为容器分配一个终端
# -d后台运行(如果不加前面-i、-t则为创建不运行,创建后容器处于关闭状态的)
# -p映射端口(docker run -it -p 80:80 --name=[容器名称] [镜像名称或镜像ID] [启动后的bash] 这样就可以把容器的80端口直接映射到宿主机的80端口)
# -v挂载宿主机某个目录到容器里面,因为我们得容器一旦删除了,容器里得数据也就被删除,为了保存数据,我们可以直接在宿主机里创建一个共享目录,挂载到容器里,让容器写数据都写到这个位置里,(docker run -it -v [宿主机目录]:[容器里的目录]  --name=[容器名称] [镜像名称或镜像ID] [启动后的bash])

docker run -i -t --name=[容器名称] [镜像名称或镜像ID] [启动后的bash]

知识扩充

# 先查看镜像,已经能查看到已下载的镜像了
[root@server-10 ~]# docker images
# 镜像名称                          标记      镜像ID         下载时间         镜像大小
REPOSITORY                          TAG      IMAGE ID       CREATED         SIZE
docker.io/ansible/centos7-ansible   latest   688353a31fde   18 months ago   447 MB

# 启动镜像,启动可以直接使用镜像名称或镜像ID
[root@server-10 ~]# docker run -i -t --name=test  docker.io/ansible/centos7-ansible /bin/bash
[root@2f7b686b0799 ansible]#

# 查看top进程,只能看到两个进程,一个是当前所使用的bash进程,一个是我们打开的top进程,这就是docker的好处,能够最小化地运行一个系统
[root@2f7b686b0799 ~]# top 
top - 07:47:15 up  1:45,  0 users,  load average: 0.00, 0.01, 0.05
Tasks:   2 total,   1 running,   1 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   997956 total,    76284 free,   177824 used,   743848 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   561800 avail Mem
PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  1 root      20   0   11764   1908   1520 S  0.0  0.2   0:00.04 bash
 15 root      20   0   51864   1924   1428 R  0.0  0.2   0:00.02 top
# 如果查看当前IP,无法直接用ip a的,我们需要讲ip这个命令安装后才可以使用
[root@2f7b686b0799 ~]# ip a
bash: ip: command not found
# 安装ip命令
yum -y install iproute

# 在宿docker的宿主机会多了一个网卡,这就是docker的网桥
[root@server-10 ~]# ifconfig docker0
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:7bff:fec5:4d46  prefixlen 64  scopeid 0x20<link>
        ether 02:42:7b:c5:4d:46  txqueuelen 0  (Ethernet)
        RX packets 5181  bytes 215583 (210.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7176  bytes 15850522 (15.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
# 这里容器的IP是跟宿主机桥接的,它们通讯时使用单独的网段,容器只能与宿主机通讯,无法跟宿主机链接外面网络进行通讯,要借助通讯才可以,后期将会介绍
# 因为每次启动容器的时候IP都是会变得,所以可以在创建容器得时候使用--ip来固定IP
docker run -ti -name test --ip 172.17.0.2 docker.io/ansible/centos7-ansible /bin/bash

5、删除镜像

删除镜像

docker rmi [镜像名称或镜像ID]

删除容器(如果容器是在运行的,必须停止容器后才可以删除)

docker rm [容器名称/容器ID]

6、让容器在后台运行

按快捷键Ctrl+P 然后 按Ctrl+Q即可让容器在后台运行

7、查看正在运行的容器

命令

docker ps

执行结果

[root@server-10 ~]# docker ps
# 容器ID        镜像名称                           运行程序       时间             运行时间        容器名称 名称
CONTAINER ID    IMAGE                              COMMAND        CREATED          STATUS          PORTS    NAMES
2f7b686b0799    docker.io/ansible/centos7-ansible  "/bin/bash"    10 minutes ago   Up 10 minutes   test

如果容器已经关闭了,使用docker ps是无法看到的,要看到不在运行的容器,在后面加-a或加-all显示所有运行/没有运行的容器

[root@server-10 ~]# docker ps -a
CONTAINER ID   IMAGE                               COMMAND     CREATED          STATUS                    PORTS      NAMES
2f7b686b0799   docker.io/ansible/centos7-ansible  "/bin/bash"  51 minutes ago   Up 51 minutes                        test
4e4a6724b58f   docker.io/ansible/centos7-ansible  "/bin/bash"  54 minutes ago   Exited (0) 51 minutes ago            test1

8、进入当前运行的容器

命令

docker attach [容器名称/容器ID(id不需要写全,只要写前面几个它也能识别)]

执行结果

[root@server-10 ~]# docker attach test
[root@2f7b686b0799 ~]#

或

[root@server-10 ~]# docker attach 2f7b
[root@2f7b686b0799 ~]#

9、退出容器

快捷键Ctrl+D或输入exit回车即可退出容器(完全关闭容器,使用docker ps是查看不到了的)

10、启动/关闭容器

# 启动容器
docker start [容器名称/容器id]

# 关闭后台运行的容器
docker stop [容器名称/容器id]

11、安装程序

在docker里安装程序跟在CentOS里安装程序一样,直接yum安装即可,这里简单安装个httpd

[root@2f7b686b0799 ~]# yum -y install httpd

启动程序不能直接跟CentOS7一样使用systemctl启动程序,因为它是精简的系统,没有system的工具的,所以需要直接运行它的程序

# 启动时会报错,这个没有关系的,报错的原因时因为在httpd配置文件里没有定义ServerName,如果不想它报这个错,就去添加ServerName
[root@2f7b686b0799 ~]# httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message

# 查看端口
[root@2f7b686b0799 ~]# ss -lntp | grep 80
Cannot open netlink socket: Permission denied
LISTEN     0      0           :::80                      :::*                   users:(("httpd",pid=125,fd=4))

# 验证
[root@2f7b686b0799 ~]# echo 'htllo docker' >/var/www/html/index.html
[root@2f7b686b0799 ~]# curl http://localhost 
htllo docker

12、让容器支持ssh链接

# 安装sshd服务
yum install openssh-server

# 生成key
ssh-keygen -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key

# 启动sshd服务(后台运行)
/sbin/sshd -D &

因为装完sshd后默认没有开机启动的,所以我们需要将它加入开机启动中,可以直接将上面的启动命令直接加入/etc/rc.local文件中

Docker程序的目录结构

[root@server-10 ~]# rpm -ql docker
/etc/docker
/etc/docker/certs.d
/etc/docker/certs.d/redhat.com
/etc/docker/certs.d/redhat.com/redhat-ca.crt
/etc/docker/certs.d/redhat.io
/etc/docker/certs.d/redhat.io/redhat-ca.crt
/etc/docker/certs.d/registry.access.redhat.com
/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt
/etc/docker/daemon.json
/etc/docker/seccomp.json
/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage
/etc/sysconfig/docker-storage-setup
/usr/bin/docker-containerd-current
/usr/bin/docker-containerd-shim-current
/usr/bin/docker-ctr-current
/usr/bin/docker-storage-setup
/usr/bin/dockerd-current
/usr/lib/systemd/system/docker-cleanup.service
/usr/lib/systemd/system/docker-cleanup.timer
/usr/lib/systemd/system/docker-storage-setup.service
/usr/lib/systemd/system/docker.service
/usr/lib/udev/rules.d/80-docker.rules
/usr/libexec/docker
/usr/libexec/docker/docker-init-current
/usr/libexec/docker/docker-proxy-current
/usr/libexec/docker/docker-runc-current
/usr/share/bash-completion/completions/docker
/usr/share/doc/docker-1.13.1
/usr/share/doc/docker-1.13.1/AUTHORS
/usr/share/doc/docker-1.13.1/CHANGELOG.md
/usr/share/doc/docker-1.13.1/CONTRIBUTING.md
/usr/share/doc/docker-1.13.1/MAINTAINERS
/usr/share/doc/docker-1.13.1/NOTICE
/usr/share/doc/docker-1.13.1/README-vim-syntax.md
/usr/share/doc/docker-1.13.1/README.md
/usr/share/fish/vendor_completions.d
/usr/share/fish/vendor_completions.d/docker.fish
/usr/share/licenses/docker-1.13.1
/usr/share/licenses/docker-1.13.1/LICENSE
/usr/share/licenses/docker-1.13.1/LICENSE-vim-syntax
/usr/share/man/man1/docker-attach.1.gz
/usr/share/man/man1/docker-build.1.gz
/usr/share/man/man1/docker-commit.1.gz
/usr/share/man/man1/docker-cp.1.gz
/usr/share/man/man1/docker-create.1.gz
/usr/share/man/man1/docker-diff.1.gz
/usr/share/man/man1/docker-events.1.gz
/usr/share/man/man1/docker-exec.1.gz
/usr/share/man/man1/docker-export.1.gz
/usr/share/man/man1/docker-history.1.gz
/usr/share/man/man1/docker-images.1.gz
/usr/share/man/man1/docker-import.1.gz
/usr/share/man/man1/docker-info.1.gz
/usr/share/man/man1/docker-inspect.1.gz
/usr/share/man/man1/docker-kill.1.gz
/usr/share/man/man1/docker-load.1.gz
/usr/share/man/man1/docker-login.1.gz
/usr/share/man/man1/docker-logout.1.gz
/usr/share/man/man1/docker-logs.1.gz
/usr/share/man/man1/docker-network-connect.1.gz
/usr/share/man/man1/docker-network-create.1.gz
/usr/share/man/man1/docker-network-disconnect.1.gz
/usr/share/man/man1/docker-network-inspect.1.gz
/usr/share/man/man1/docker-network-ls.1.gz
/usr/share/man/man1/docker-network-rm.1.gz
/usr/share/man/man1/docker-pause.1.gz
/usr/share/man/man1/docker-port.1.gz
/usr/share/man/man1/docker-ps.1.gz
/usr/share/man/man1/docker-pull.1.gz
/usr/share/man/man1/docker-push.1.gz
/usr/share/man/man1/docker-rename.1.gz
/usr/share/man/man1/docker-restart.1.gz
/usr/share/man/man1/docker-rm.1.gz
/usr/share/man/man1/docker-rmi.1.gz
/usr/share/man/man1/docker-run.1.gz
/usr/share/man/man1/docker-save.1.gz
/usr/share/man/man1/docker-search.1.gz
/usr/share/man/man1/docker-start.1.gz
/usr/share/man/man1/docker-stats.1.gz
/usr/share/man/man1/docker-stop.1.gz
/usr/share/man/man1/docker-storage-setup.1.gz
/usr/share/man/man1/docker-tag.1.gz
/usr/share/man/man1/docker-top.1.gz
/usr/share/man/man1/docker-unpause.1.gz
/usr/share/man/man1/docker-update.1.gz
/usr/share/man/man1/docker-version.1.gz
/usr/share/man/man1/docker-wait.1.gz
/usr/share/man/man1/docker.1.gz
/usr/share/man/man5/Dockerfile.5.gz
/usr/share/man/man5/docker-config-json.5.gz
/usr/share/man/man8/dockerd.8.gz
/usr/share/vim/vimfiles/doc
/usr/share/vim/vimfiles/doc/dockerfile.txt
/usr/share/vim/vimfiles/ftdetect
/usr/share/vim/vimfiles/ftdetect/dockerfile.vim
/usr/share/vim/vimfiles/syntax
/usr/share/vim/vimfiles/syntax/dockerfile.vim
/usr/share/zsh/site-functions
/usr/share/zsh/site-functions/_docker
/var/lib/docker
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值