yujin2010good
作者yujin2010good·2018-11-28 10:39
系统工程师·大型零售巨头

docker学习二--安装及常用命令

字数 21105阅读 1428评论 0赞 3

基本命令

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

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

docker images centos

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

docker run -i -t centos /bin/bash

8.检查安装是否成功

$docker version

9、验证docker是否安装成功

docker info

10、查看docker进程

systemctl |grep docker

11、关闭防火墙

systemctl disables firewall

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

yum install iptables-services
systemctl enable iptables
systemctl start iptables

13、启动之后查看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
  

14、查看log(排错用)

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

15、基础命令

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[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 ~]#

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

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

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)]>

17、进程管理

在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。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广