基本命令
1、yum安装docker,需要要root权限
yum install docker

2、启动docker

systemctl start docker.service

3、查看docker的状态


systemctl status docker.service 



4、添加开机启动项


systemctl enable doccker.service



5、获取centos镜像,下载的时间和网络有关,可能会时间比较长!


docker pull centos:latest



7、查看镜像(本地已经装载的镜像)


docker images centos



8、运行bash,来跑简单的测试案例!


docker run -i -t centos /bin/bash



9.检查安装是否成功 


$docker version 



10、验证docker是否安装成功


docker info


11、查看docker进程


systemctl |grep docker



12、关闭防火墙


systemctl disables firewall



13、如无网络环境需要安装iptables,这样可以映射端口


yum install iptables-services


systemctl enable iptables


systemctl start iptables



14、启动之后查看ip a,发现分配了一个docker0(网桥)


docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN  

    link/ether 02:42:cc:f6:67:93 brd ff:ff:ff:ff:ff:ff 

    inet 172.17.0.1/16 scope global docker0 

       valid_lft forever preferred_lft forever

  


15、查看log(排错用)


tail -f /var/log/messages|grep docker



16、基础命令


docker search 

docker pull java 

docker images 

docker run -it java java -version      (-it 交互模式) 

docker run -it java ps 

docker run -it java uname 

docker run java ip addr 

docker run java env



docker run里面的命令结束了,container就结束了。



docker run [options] IMAGE[:TAG][COMAND][ARG..]


决定容器的运行方式,前台执行还是后台执行


docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。


docker exec来进入到该容器,或者attach重新连接容器的回话。


进行交互操作(例如shell),那么我们必须用-i -t参数同容器进行数据交互


docker run时没有指定--name,那么deamon会自动生成一个随机字符串UUID


docker时有自动化的需求,你可以将containerID输出到制定的文件中(PIDfile):--cidfile=''


docker的容器是没有特权的,例如不能在容器中在启动另一个容器,这是因为默认情况下容器是不能访问任何其他设备的,但是通过“privileged”,容器就拥有了访问任何其他设备的权限。


====================================


实例


root@ip-10-249-100-205 ~]# yum install docker 

Loaded plugins: fastestmirror 

Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast 

base                                                                                                         | 3.6 kB  00:00:00      

epel                                                                                                         | 4.7 kB  00:00:00      

extras                                                                                                       | 3.4 kB  00:00:00      

updates                                                                                                      | 3.4 kB  00:00:00      

(1/5): epel/x86_64/updateinfo                                                                                | 880 kB  00:00:00      

(2/5): epel/x86_64/group_gz                                                                                  | 266 kB  00:00:00      

(3/5): extras/7/x86_64/primary_db                                                                            | 166 kB  00:00:00      

(4/5): epel/x86_64/primary_db                                                                                | 6.2 MB  00:00:00      

(5/5): updates/7/x86_64/primary_db                                                                           | 6.0 MB  00:00:01      

Determining fastest mirrors 

 * base: mirrors.aliyun.com 

 * epel: mirrors.aliyun.com 

 * extras: mirrors.aliyun.com 

 ................. 

[root@ip-10-249-100-205 ~]# systemctl status docker.service  

● docker.service - Docker Application Container Engine 

   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) 

   Active: inactive (dead) 

     Docs: http://docs.docker.com 

[root@ip-10-249-100-205 ~]# systemctl start docker.service 

[root@ip-10-249-100-205 ~]# systemctl status docker.service  

● docker.service - Docker Application Container Engine 

   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) 

   Active: active (running) since Thu 2018-02-08 16:01:18 CST; 2s ago 

     Docs: http://docs.docker.com 

 Main PID: 3066 (dockerd-current) 

   CGroup: /system.slice/docker.service 

           ├─3066 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=do... 

           └─3073 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker... 



Feb 08 16:01:17 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:17.910795663+08:00" level=warning msg="mount...ound" 

Feb 08 16:01:17 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:17.911051246+08:00" level=info msg="Loading ...art." 

Feb 08 16:01:17 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:17.949714902+08:00" level=warning msg="Running mo... 

Feb 08 16:01:17 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:17.993634012+08:00" level=info msg="Firewall...alse" 

Feb 08 16:01:18 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:18.211764057+08:00" level=info msg="Default ...ress" 

Feb 08 16:01:18 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:18.346131674+08:00" level=info msg="Loading ...one." 

Feb 08 16:01:18 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:18.346247481+08:00" level=info msg="Daemon h...tion" 

Feb 08 16:01:18 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:18.346270371+08:00" level=info msg="Docker d....12.6 

Feb 08 16:01:18 ip-10-249-100-205 dockerd-current[3066]: time="2018-02-08T16:01:18.353981494+08:00" level=info msg="API list...sock" 

Feb 08 16:01:18 ip-10-249-100-205 systemd[1]: Started Docker Application Container Engine. 

Hint: Some lines were ellipsized, use -l to show in full. 

[root@ip-10-249-100-205 ~]# systemctl enable docker.service 

Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 

[root@ip-10-249-100-205 ~]# systemctl |grep docker 

  sys-devices-virtual-net-docker0.device                                                           loaded active plugged   /sys/devices/virtual/net/docker0 

  sys-subsystem-net-devices-docker0.device                                                         loaded active plugged   /sys/subsystem/net/devices/docker0 

● docker-storage-setup.service                                                                     loaded failed failed    Docker Storage Setup 

  docker.service                                                                                   loaded active running   Docker Application Container Engine 

  docker-cleanup.timer                                                                             loaded active waiting   Run docker-cleanup every hour 

[root@ip-10-249-100-205 ~]# docker version  

Client: 

 Version:         1.12.6 

 API version:     1.24 

 Package version: docker-1.12.6-71.git3e8e77d.el7.centos.1.x86_64 

 Go version:      go1.8.3 

 Git commit:      3e8e77d/1.12.6 

 Built:           Tue Jan 30 09:17:00 2018 

 OS/Arch:         linux/amd64 



Server: 

 Version:         1.12.6 

 API version:     1.24 

 Package version: docker-1.12.6-71.git3e8e77d.el7.centos.1.x86_64 

 Go version:      go1.8.3 

 Git commit:      3e8e77d/1.12.6 

 Built:           Tue Jan 30 09:17:00 2018 

 OS/Arch:         linux/amd64 

[root@ip-10-249-100-205 ~]# docker info 

Containers: 0 

 Running: 0 

 Paused: 0 

 Stopped: 0 

Images: 0 

Server Version: 1.12.6 

Storage Driver: devicemapper 

 Pool Name: docker-253:0-201736978-pool 

 Pool Blocksize: 65.54 kB 

 Base Device Size: 10.74 GB 

 Backing Filesystem: xfs 

 Data file: /dev/loop0 

 Metadata file: /dev/loop1 

 Data Space Used: 11.8 MB 

 Data Space Total: 107.4 GB 

 Data Space Available: 47.4 GB 

 Metadata Space Used: 581.6 kB 

 Metadata Space Total: 2.147 GB 

 Metadata Space Available: 2.147 GB 

 Thin Pool Minimum Free Space: 10.74 GB 

 Udev Sync Supported: true 

 Deferred Removal Enabled: true 

 Deferred Deletion Enabled: true 

 Deferred Deleted Device Count: 0 

 Data loop file: /var/lib/docker/devicemapper/devicemapper/data 

 WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. 

 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata 

 Library Version: 1.02.107-RHEL7 (2015-10-14) 

Logging Driver: journald 

Cgroup Driver: systemd 

Plugins: 

 Volume: local 

 Network: null host bridge overlay 

Swarm: inactive 

Runtimes: docker-runc runc 

Default Runtime: docker-runc 

Security Options: seccomp 

Kernel Version: 3.10.0-327.el7.x86_64 

Operating System: CentOS Linux 7 (Core) 

OSType: linux 

Architecture: x86_64 

Number of Docker Hooks: 3 

CPUs: 4 

Total Memory: 7.64 GiB 

Name: ip-10-249-100-205 

ID: PR4W:F4PU:Q6CN:7WDF:KSRH:BA2D:HYQR:UMDB:OCWT:FE6B:LXKV:MWBK 

Docker Root Dir: /var/lib/docker 

Debug Mode (client): false 

Debug Mode (server): false 

Registry: https://index.docker.io/v1/ 

WARNING: bridge-nf-call-iptables is disabled 

WARNING: bridge-nf-call-ip6tables is disabled 

Insecure Registries: 

 127.0.0.0/8 

Registries: docker.io (secure) 

[root@ip-10-249-100-205 ~]#  

[root@ip-10-249-100-205 ~]# tail -f /var/log/messages|grep docker 

Feb  8 16:01:18 ip-10-249-100-205 nm-dispatcher: Dispatching action 'up' for docker0 

Feb  8 16:01:18 ip-10-249-100-205 dockerd-current: time="2018-02-08T16:01:18.346131674+08:00" level=info msg="Loading containers: done." 

Feb  8 16:01:18 ip-10-249-100-205 dockerd-current: time="2018-02-08T16:01:18.346247481+08:00" level=info msg="Daemon has completed initialization" 

Feb  8 16:01:18 ip-10-249-100-205 dockerd-current: time="2018-02-08T16:01:18.346270371+08:00" level=info msg="Docker daemon" commit="3e8e77d/1.12.6" graphdriver=devicemapper version=1.12.6 

Feb  8 16:01:18 ip-10-249-100-205 dockerd-current: time="2018-02-08T16:01:18.353981494+08:00" level=info msg="API listen on /var/run/docker.sock" 

[root@ip-10-249-100-205 ~]# docker search java 

INDEX       NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED 

docker.io   docker.io/node                                         Node.js is a JavaScript-based platform for...   5078      [OK]        

docker.io   docker.io/tomcat                                       Apache Tomcat is an open source implementa...   1713      [OK]        

docker.io   docker.io/java                                         Java is a concurrent, class-based, and obj...   1633      [OK]        

docker.io   docker.io/openjdk                                      OpenJDK is an open-source implementation o...   822       [OK]        

docker.io   docker.io/ghost                                        Ghost is a free and open source blogging p...   704       [OK]        

docker.io   docker.io/anapsix/alpine-java                          Oracle Java 8 (and 7) with GLIBC 2.23 over...   280                  [OK] 

docker.io   docker.io/jetty                                        Jetty provides a Web server and javax.serv...   225       [OK]        

docker.io   docker.io/isuper/java-oracle                           This repository contains all java releases...   55                   [OK] 

docker.io   docker.io/lwieske/java-8                               Oracle Java 8 Container - Full + Slim - Ba...   37                   [OK] 

docker.io   docker.io/groovy                                       Apache Groovy is a multi-faceted language ...   27        [OK]        

docker.io   docker.io/cloudbees/jnlp-slave-with-java-build-tools   Extends cloudbees/java-build-tools docker ...   15                   [OK] 

docker.io   docker.io/zabbix/zabbix-java-gateway                   Zabbix Java Gateway                             9                    [OK] 

docker.io   docker.io/blacklabelops/java                           Oracle Java Base Images. Alpine and CentOS...   8                    [OK] 

docker.io   docker.io/frekele/java                                 docker run --rm --name java frekele/java        7                    [OK] 

docker.io   docker.io/1science/java                                Java Docker images based on Alpine Linux        6                    [OK] 

docker.io   docker.io/davidcaste/alpine-java-unlimited-jce         Oracle Java 8 (and 7) with GLIBC 2.21 over...   6                    [OK] 

docker.io   docker.io/fabric8/s2i-java                             S2I Builder Image for plain Java applications   3                     

docker.io   docker.io/dwolla/java                                  Dwolla’s custom Java image                      1                    [OK] 

docker.io   docker.io/appuio/s2i-gradle-java                       S2I Builder with Gradle and Java                0                    [OK] 

docker.io   docker.io/appuio/s2i-maven-java                        S2I Builder with Maven and Java                 0                    [OK] 

docker.io   docker.io/appuio/s2i-play-java                         Simple S2I Builder Image for Play and Java      0                    [OK] 

docker.io   docker.io/cfje/java-buildpack                          Java Buildpack CI Image                         0                     

docker.io   docker.io/cfje/java-test-applications                  Java Test Applications CI Image                 0                     

docker.io   docker.io/pcfcodesigning/code-signing-java-phantom     Base Java image with PhantomJS 2.1.1            0                     

docker.io   docker.io/thingswise/java-docker                       Java + dcd                                      0                    [OK] 

[root@ip-10-249-100-205 ~]# docker images 

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 

docker.io/java      latest              d23bdf5b1b1b        12 months ago       643.1 MB 

[root@ip-10-249-100-205 ~]# docker run -it java java -version 

openjdk version "1.8.0_111" 

OpenJDK Runtime Environment (build 1.8.0_111-8u111-b14-2~bpo8+1-b14) 

OpenJDK 64-Bit Server VM (build 25.111-b14, mixed mode) 

[root@ip-10-249-100-205 ~]# docker run -it java ps 

  PID TTY          TIME CMD 

    1 ?        00:00:00 ps 

[root@ip-10-249-100-205 ~]# docker run -it java uname 

Linux 

[root@ip-10-249-100-205 ~]# docker run java ip addr 

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default  

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 

    inet 127.0.0.1/8 scope host lo 

       valid_lft forever preferred_lft forever 

    inet6 ::1/128 scope host  

       valid_lft forever preferred_lft forever 

10: eth0@if11: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default  

    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff 

    inet 172.17.0.2/16 scope global eth0 

       valid_lft forever preferred_lft forever 

    inet6 fe80::42:acff:fe11:2/64 scope link tentative  

       valid_lft forever preferred_lft forever 

[root@ip-10-249-100-205 ~]# docker run java env 

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

HOSTNAME=0d4a117ad942 

LANG=C.UTF-8 

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 

JAVA_VERSION=8u111 

JAVA_DEBIAN_VERSION=8u111-b14-2~bpo8+1 

CA_CERTIFICATES_JAVA_VERSION=20140324 

HOME=/root 

[root@ip-10-249-100-205 ~]# 

============================================ 

17、容器生命周期相关指令 

docker create/start/stop/pause/unpause 

create只是创建一个容器不启动 

docker create -it --name=myjava java java -version 

docker start myjava


下载一个mysql镜像,并设置好用户名密码


docker create --name mysqlsrv1 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql 

docker start mysqlsrv1 

docker ps



安装一个客户端,可以登录



docker exec -it mysqlsrv1 /bin/bash 进入容器交互模式 

root@1549052941a1:/# cat /var/log/mysql/error.log  

root@1549052941a1:/# env 

HOSTNAME=1549052941a1 

MYSQL_VERSION=5.7.21-1debian8 

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

PWD=/ 

SHLVL=1 

HOME=/root 

MYSQL_MAJOR=5.7 

GOSU_VERSION=1.7 

MYSQL_ROOT_PASSWORD=123456 

_=/usr/bin/env
======================
[root@ip-10-249-100-205 ~]# docker create -it --name=myjava java java -version 

195b0223db4ae363ae23be392d8498266a3c635b8c0bba7a784c7a3b4c93ad15 

[root@ip-10-249-100-205 ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES 

195b0223db4a        java                "java -version"     6 seconds ago       Created                                        myjava 

0d4a117ad942        java                "env"               2 minutes ago       Exited (0) 2 minutes ago                       lonely_boyd 

f9770dd1783e        java                "ip addr"           2 minutes ago       Exited (0) 2 minutes ago                       focused_volhard 

15af6702edf0        java                "uname"             2 minutes ago       Exited (0) 2 minutes ago                       prickly_curie 

6a80c6413d52        java                "ps"                2 minutes ago       Exited (0) 2 minutes ago                       distracted_noether 

5dead85d580b        java                "java -version"     3 minutes ago       Exited (0) 3 minutes ago                       fervent_northcutt 

[root@ip-10-249-100-205 ~]#  

[root@ip-10-249-100-205 ~]# docker start myjava 

myjava 

[root@ip-10-249-100-205 ~]# docker ps  前台执行完,后台就没有了 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

[root@ip-10-249-100-205 ~]#  

[root@ip-10-249-100-205 ~]# docker create --name mysqlsrv1 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql 

Unable to find image 'mysql:latest' locally 

Trying to pull repository docker.io/library/mysql ...  

latest: Pulling from docker.io/library/mysql 

f49cf87b52c1: Pull complete  

78032de49d65: Pull complete  

837546b20bc4: Pull complete  

9b8316af6cc6: Pull complete  

1056cf29b9f1: Pull complete  

86f3913b029a: Pull complete  

f98eea8321ca: Pull complete  

3a8e3ebdeaf5: Pull complete  

4be06ac1c51e: Pull complete  

920c7ffb7747: Pull complete  

Digest: sha256:7cdb08f30a54d109ddded59525937592cb6852ff635a546626a8960d9ec34c30 

1549052941a1024c0c1933b911866d46272d2395f385ff7f4e0bfc8b0a306848 

[root@ip-10-249-100-205 ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES 

[root@ip-10-249-100-205 ~]# docker start mysqlsrv1 

mysqlsrv1 

[root@ip-10-249-100-205 ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES 

1549052941a1        mysql               "docker-entrypoint.sh"   2 minutes ago       Up 1 seconds        0.0.0.0:3306->3306/tcp   mysqlsrv1 

[root@ip-10-249-100-205 ~]# netstat -tlp 

Active Internet connections (only servers) 

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name     

tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      892/sshd             

tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN      1858/master          

tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      4649/docker-proxy-c  

tcp6       0      0 [::]:http               [::]:*                  LISTEN      23859/java           

tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      892/sshd             

tcp6       0      0 localhost:smtp          [::]:*                  LISTEN      1858/master          

tcp6       0      0 [::]:19295              [::]:*                  LISTEN      23859/java           

tcp6       0      0 localhost:10501         [::]:*                  LISTEN      23859/java  

[root@ip-10-249-100-205 ~]# yum install mysql 

[root@ip-10-249-100-205 ~]# mysql -uroot -p123456 -h10.249.100.205 

Welcome to the MariaDB monitor.  Commands end with ; or \g. 

Your MySQL connection id is 2 

Server version: 5.7.21 MySQL Community Server (GPL) 

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

MySQL [(none)]>


18、进程管理


在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据。


但是,对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,因而可以在容器启动时设置--rm选项,这样在容器退出时就能够自动清理容器内部的文件系统。


[root@ip-10-249-100-205 ~]# docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES 

1549052941a1        mysql               "docker-entrypoint.sh"   23 minutes ago      Up 20 minutes       0.0.0.0:3306->3306/tcp   mysqlsrv1 

[root@ip-10-249-100-205 ~]# docker ps -a 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES 

1549052941a1        mysql               "docker-entrypoint.sh"   23 minutes ago      Up 20 minutes               0.0.0.0:3306->3306/tcp   mysqlsrv1 

195b0223db4a        java                "java -version"          34 minutes ago      Exited (0) 33 minutes ago                            myjava 

0d4a117ad942        java                "env"                    36 minutes ago      Exited (0) 36 minutes ago                            lonely_boyd 

f9770dd1783e        java                "ip addr"                36 minutes ago      Exited (0) 36 minutes ago                            focused_volhard 

15af6702edf0        java                "uname"                  37 minutes ago      Exited (0) 37 minutes ago                            prickly_curie 

6a80c6413d52        java                "ps"                     37 minutes ago      Exited (0) 37 minutes ago                            distracted_noether 

5dead85d580b        java                "java -version"          37 minutes ago      Exited (0) 37 minutes ago                            fervent_northcutt



以上发现运行的docker和运行过的docker都存在,会暂用磁盘空间


需要加上run -rm


docker run --rm java ps


docker run --rm -it java ps


显然,--rm选项不能与-d同时使用,即只能自动清理foreground容器,不能自动清理detached容器


注意,--rm选项也会清理容器的匿名data volumes。


所以,执行docker run命令带--rm命令选项,等价于在容器退出后,执行docker rm -v。