一、安装docker

环境:rhel7.3的YUM源
[root@18 docker]# yum install docker-engine-17.03.1.ce-1.el7.centos.x86_64.rpm -y
[root@18 docker]# yum install docker-engine-selinux-17.03.1.ce-1.el7.centos.noarch.rpm -y
[root@18 docker]# systemctl start docker.service 
##查看docker版本
[root@18 docker]# docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:36:45 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:36:45 2017
 OS/Arch:      linux/amd64
 Experimental: false

二、添加镜像源

在阿里云注册帐号,使用镜像加速器:
这里写图片描述

[root@18 ~]# sudo mkdir -p /etc/docker
[root@18 ~]# tee /etc/docker/daemon.json <<-'EOF'  ##镜像加速
> {
>   "registry-mirrors": ["https://afvtk9f6.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://afvtk9f6.mirror.aliyuncs.com"]
}
##在网上搜索镜像
[root@foundation10 docker]# docker search nginx
##从阿里云源nginx镜像
[root@18 docker]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
d660b1f15b9b: Downloading   8.4 MB/54.25 MB
aa1c79a2fa37: Download complete 
f5f6514c0aff: Download complete 
...

三、使用docker

导入镜像

[root@18 pub]# docker load < game2048.tar
011b303988d2: Loading layer  5.05 MB/5.05 MB
36e9226e74f8: Loading layer 51.46 MB/51.46 MB
192e9fad2abc: Loading layer 3.584 kB/3.584 kB
6d7504772167: Loading layer 4.608 kB/4.608 kB
88fca8ae768a: Loading layer 629.8 kB/629.8 kB
Loaded image: game2048:latest
##docker run             --创建一个新的容器并运行加载镜像
-i: 以交互模式运行容器,通常与 -t 同时使用;
-p: 端口映射,格式为:主机(宿主)端口:容器端口
-d: 后台运行容器,并返回容器ID--name="nginx-lb": 为容器指定一个名称;
-h "mars": 指定容器的hostname;
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;


[root@18 pub]#  docker run -d --name vm1 game2048
1e7edf48084a0e5f7d8fd446139bb7628db408c29aac037867f55e350c17037c

在浏览器中访问IP:172.17.0.2,即可进入刚导入的2048小游戏。
这里写图片描述

##docker ps             --列出所有在运行的容器信息。
    -a :显示所有的容器,包括未运行的。
    -l :显示最近创建的容器。
    -n :列出最近创建的n个容器。
    -q :静默模式,只显示容器编号。
    -s :显示总的文件大小。
[root@18 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
1e7edf48084a        game2048            "/bin/sh -c 'sed -..."   4 minutes ago       Up 4 minutes        80/tcp, 443/tcp     vm1
[root@18 docker]# ip addr
##查看到主机上创建新的虚拟网桥 docker0 :ip(172.17.0.1/16)
9: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:d8:d0:7f:2a brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:d8ff:fed0:7f2a/64 scope link 
       valid_lft forever preferred_lft forever
##docker images  -- 列出本地镜像。
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
-q :只显示镜像ID
[root@18 docker]# docker images game2048
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
game2048            latest              19299002fdbe        20 months ago       55.5 MB
##docker inspect     -- 获取容器/镜像的元数据。
[root@18 docker]# docker inspect vm1
...
              "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02"
[root@18 pub]# iptables -t nat -L

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.17.0.0/16        anywhere            
RETURN     all  --  192.168.122.0/24     224.0.0.0/24        

容器管理命令

# docker attach vm1              连接容器
# docker top vm1                 查看容器中运行的进程信息
# docker logs vm1                查看容器指令输出 -f 参数可以实时查看
# docker stats vm1               查看容器资源使用率
# docker diff vm1                查看容器修改
# docker run -d --name vm1 ubuntu bash -c "while true; do echo westos; sleep 1; done"   运行容器时执行命令
# docker stop vm1                停止容器
# docker start vm1               启动容器
# docker kill vm1                强制干掉容器
# docker restart vm1             重启容器
# docker pause/unpause vm1       暂停/恢复容器
# docker rm vm1                  删除容器
# docker export vm1 > vm1.tar    导出容器
# docker import vm1.tar image    导入容器为镜像 image
# docker container prune         删除所有停止的容器
# docker load -i rhel7.tar       导入镜像

docker使用nginx

[root@18 docker]# docker load < nginx.tar
[root@18 ~]# docker images nginx
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              af4b3d7d5401        2 years ago         190 MB
[root@18 docker1]# docker cp index.html vm2:/usr/share/nginx/html/
[root@18 ~]# docker run -d --name vm2 -p 8080:80 nginx
7c115522c0f66a10625c2d30af2a206dd4dc8d694503067d6221571810023515

在浏览器上访问测试:
这里写图片描述

五、挂载文件系统

挂载nginx配置文件目录

[root@79 KINGSTON]# mkdir /tmp/docker
[root@79 KINGSTON]# cd /tmp/docker/
[root@79 docker]# mkdir web
[root@79 docker]# cd web/
[root@79 web]# vim index.html
[root@79 web]# docker run -d --name vm3 -v /tmp/docker/web:/usr/share/nginx/html nginx
4fd1f5371b4a301498f7309438feef10d8a647b0c990b42954e309d0b7696972

这里写图片描述

ctrl pq 退出但不停止
ctrl  d 关闭容器
[root@18 docker1]# docker images centos 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              5182e96772bf        12 days ago         200 MB
centos              6                   d0a31e3494fe        2 years ago         229 MB
##使用image ID运行miage
[root@18 docker1]# docker run -it 5182e96772bf /bin/bash
[root@b94b108bd5c5 /]# 
[root@18 web]# docker run -it --name vm1 -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 bash
bash-4.2# df

bash-4.2# ls data*
data1:
data2:
bash-4.2# ls /etc/yum.repos.d/    
rhel-dvd.repo  rhel7.repo
bash-4.2# yum repolist
bash-4.2# cd /data2
bash-4.2# touch file
touch: cannot touch 'file': Read-only file system
bash-4.2# cd /data1/
bash-4.2# touch file1

##文件挂载测试
[root@79 data1]# ls /tmp/data1/
file1
从指定容器上获取文件卷
[root@18 web]# docker rm -f vm1
[root@18 web]# docker create --name datavol -v /tmp/data1:/data1 -v /tmp/data2:/data2:ro -v /etc/yum.repos.d/rhel-dvd.repo:/etc/yum.repos.d/rhel-dvd.repo:ro rhel7 bash
[root@18 web]# docker run -it --name vm1 --volumes-from datavol rhel7 bash
##备份容器
[root@18 docker]# docker load -i ubuntu.tar 
[root@18 docker]# docker run --rm -v /tmp/backup:/backup ubuntu tar cf /backup/etc.tar /etc
[root@18 docker]# cd /tmp/backup/
[root@18 backup]# ls
etc.tar
[root@18 test]# docker run -it --name vm1 ubuntu

[root@18 docker]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                            NAMES
e63ae37b7d6b        ubuntu              "/bin/bash"              15 seconds ago      Up 14 seconds  
[root@18 docker]# docker inspect vm1 | grep Pid
            "Pid": 31145,
            "PidMode": "",
            "PidsLimit": 0,

 ```
 ```
[root@18 backup]# ps ax
31145 pts/8    Ss+    0:00 /bin/bash
[root@18 backup]# cd /proc/13505/ns
[root@18 ns]# ll
total 0
lrwxrwxrwx 1 root root 0 Aug 19 14:57 ipc -> ipc:[4026532408]
lrwxrwxrwx 1 root root 0 Aug 19 14:57 mnt -> mnt:[4026532406]
lrwxrwxrwx 1 root root 0 Aug 19 14:56 net -> net:[4026532411]
lrwxrwxrwx 1 root root 0 Aug 19 14:57 pid -> pid:[4026532409]
lrwxrwxrwx 1 root root 0 Aug 19 14:57 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Aug 19 14:57 uts -> uts:[4026532407]
Logo

更多推荐