1:docker 安装时 linux内核版本太低问题node
使用uname -a 能够查看linux内核的版本号,例如ubuntu会输出相似的内容:mysql
root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
因为docker的安装条件包括了内核的条件限制:低于3.8的运行docker可能会有问题linux
下面来看一下如何升级linux内核sql
apt-get update
spt-get install linux-headers-版本号-generic等待安装完毕
而后是用update-grub启动加载器加载新内核。docker
最后使用reboot来重启宿主机启用新的内核。shell
验证如下使用uname -a看看内核版本有没有变化json
2:验证docker是否已经准备就绪ubuntu
docker info
使用docker可执行程序的info命令,若是docker准备就绪的话,会输出已运行的容器数量,安装的镜像数量,docker使用的执行驱动和存储驱动和docker环境的配置信息。vim
3:docker 是一个基于 c/s架构设计的,既能作客户端也能作服务器。作客户端时,docker程序向docker守护进程发送请求,而后在度i返回的请求结果惊醒处理。bash
4:运行一个容器
docker run -i -t ubuntu /bin/bash
下面来解释如下各个参数的意思:
docker run 这是docker的一条命令,
-i 标志保证容器中STDIN时开启的,持久的表中输入时交互式shell的半边天
-t 告诉docker为要建立的容器分配一个伪tty终端。另外半边天。
ubunutu 是一个镜像。
/bin/bash 告诉docker容器运行一个shell命令。
运行完上面的命令后就会i进入到ubuntu容器中,docker会给容器分配一个惟一id:dae666724601
root@ubuntu:~# docker run -i -t ubuntu /bin/bash
root@dae666724601:/#
root@dae666724601:/# hostname
dae666724601
root@dae666724601:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.4 dae666724601
root@dae666724601:/# apt-get update && apt-get install vim
root@dae666724601:/# exit
exit
这条命令会结束容器的运行。可使用虾米那一条命令来看一下容器是否已经结束运行了
root@ubuntu:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dae666724601 ubuntu "/bin/bash" 18 minutes ago Exited (0) 6 seconds ago heuristic_poincare
-l参数是列出最后一次运行的容器,亲测只包括已经中止的。
-a参数是查看当前系统中容器的列表(已经中止的和正在运行的),来看一下二者的输出区别:
root@ubuntu:~# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dae666724601 ubuntu "/bin/bash" 18 minutes ago Exited (0) 6 seconds ago heuristic_poincare
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dae666724601 ubuntu "/bin/bash" 22 minutes ago Exited (0) 3 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
从上面的输出结果能够看出来,NAMES这一列,系统给自动分配了一个随机的名字。下面来讲一下容器的命名
root@ubuntu:~# docker ps -al
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 19 seconds ago Exited (0) 5 seconds ago smeon_ubuntu
细心的同窗应该会发现容器的惟一id和名字都变了。是的,咱们在使用run命令的时候,docker是会进行建立和运行两步操做的,可是用的是同一个镜像。因此使用docker ps -a 会看到有两个ubuntu容器已经中止了。
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 27 seconds ago Exited (0) 14 seconds ago smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 31 minutes ago Exited (0) 13 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
那若是像复用以前已经中止的容器该怎么办呢?这就须要使用另外一个命令。
root@ubuntu:~# docker start smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 6 minutes ago Up 50 seconds smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 37 minutes ago Exited (0) 19 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
能够看到以前中止的指定名字的容器已经启动了。另外两种方式能够本身去试一下。另外还可使用docker restart 容器名字/惟一段id/惟一长id 来重启容器。
root@ubuntu:~# docker stop smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1ee14b8f14 ubuntu "/bin/bash" 9 minutes ago Exited (0) 5 seconds ago smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 40 minutes ago Exited (0) 22 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
root@ubuntu:~# docker attach heuristic_poincare
root@dae666724601:/#
这里须要注意的是:若是容器时中止的,attach 的时候会失败。
root@ubuntu:~# docker run --name daemon_ubuntu -d ubuntu /bin/bash -c "while true; do echo hello world;sleep 1; done"
6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69
-d 参数是一个后台运行的参数
-c 参数是一直循环输出hello world,直到容器或进程中止。
问题来了:怎么能看到上一条命令的输出呢?这须要下一条命令:
root@ubuntu:~# docker logs daemon_ubuntu
hello world
hello world
hello world
hello world
hello world
...
若是不想查看全部日志,只须要追踪最新的logs日志,有没有向tail -f 同样的参数呢?大难是确定的。
docker logs --tail 10 -f daemon_ubunt 使用参数 --tail 便可以查看最近10条的日志。
root@ubuntu:~# docker top daemon_ubuntu
UID PID PPID C STIME TTY TIME CMD
root 13148 13131 0 10:13 ? 00:00:00 /bin/bash -c while true; do echo hello world;sleep 1; done
root 13996 13148 0 10:21 ? 00:00:00 sleep 1
root@ubuntu:~# docker exec -d smeon_ubuntu touch /home/config_file.conf
root@ubuntu:~# docker restart smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker attach smeon_ubuntu
root@dd1ee14b8f14:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@dd1ee14b8f14:/# cd home/
root@dd1ee14b8f14:/home# ls
config_file.conf
-d 参数 代表要运行一个后台进程
-d以后是指明容器的名字,以及须要执行的命令。这里建立一个空的配置文件。
经过docker exec 命令能够在正在运行的容器中进行维护,监控和管理任务。
再举一个例子:在start 或restart的一个容器的时候不会进入到对应的容器内。也就是不会进入到交互式界面,这时候可使用docker exec 来进入shell交互式界面。
root@ubuntu:~# docker exec -i -t smeon_ubuntu /bin/bash
root@dd1ee14b8f14:/#
root@ubuntu:~# docker run --restart=always --name daemon_ubuntu -d ubuntu /bin/bash -c "while true; echo hello world; sleep 1 ; done"
docker: Error response from daemon: Conflict. The container name "/daemon_ubuntu" is already in use by container "6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.
注意这个--resatrt参数是只有run 命令才有的,start 和restart没有该参数。run 会建立新的容器。
root@ubuntu:~# docker inspect daemon_ubuntu
[
{
"Id": "6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69",
"Created": "2020-05-28T02:13:05.496480088Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true; do echo hello world;sleep 1; done"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2020-05-28T02:22:28.858219855Z",
"FinishedAt": "2020-05-28T02:52:01.914573489Z"
},
"Image": "sha256:1d622ef86b138c7e96d4f797bf5e4baca3249f030c575b9337638594f2b63f01",
"ResolvConfPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/hostname",
"HostsPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/hosts",
"LogPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69-json.log",
"Name": "/daemon_ubuntu",
...
}
]
inspect命令返回的参数比较多,能够经过--format参数来输出指定的配置信息。例如:
root@ubuntu:~# docker inspect --format='{{.State.Status}}' daemon_ubuntu
exited
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b2bd21daf33 ubuntu "/bin/bash -c 'while…" 45 minutes ago Exited (137) 6 minutes ago daemon_ubuntu
dd1ee14b8f14 ubuntu "/bin/bash" About an hour ago Up 26 minutes smeon_ubuntu
dae666724601 ubuntu "/bin/bash" 2 hours ago Exited (0) 53 minutes ago heuristic_poincare
8b7fa227bca2 mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
root@ubuntu:~# docker rm heuristic_poincare
heuristic_poincare
root@ubuntu:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6b2bd21daf33 ubuntu "/bin/bash -c 'while…" 46 minutes ago Exited (137) 7 minutes ago daemon_ubuntu
dd1ee14b8f14 ubuntu "/bin/bash" About an hour ago Up 26 minutes smeon_ubuntu
8b7fa227bca2 mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 33060/tcp, 0.0.0.0:3307->3306/tcp second_mysql
df6e780fb24a mysql "docker-entrypoint.s…" 18 hours ago Up 18 hours 0.0.0.0:3306->3306/tcp, 33060/tcp first-mysql
root@ubuntu:~#
各位至此,docker的入门基本已经结束,欢迎收藏+推荐