[twx@localhost ~]$ uname -a
Linux localhost.localdomain 3.10.0-327.28.2.el7.x86_64 #1 SMP Wed Aug 3 11:11:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
安装命令:sudo yum install -y docker
启动守护进程:sudo service docker start
[twx@localhost ~]$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
[twx@localhost ~]$ sudo service docker status
Redirecting to /bin/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 一 2016-08-08 15:27:30 CST; 25s ago
Docs: http://docs.docker.com
sudo docker info
该命令会返回所有容器和镜像的数量以及其他一些信息
sudo docker run -i -t ubuntu /bin/bash
ubuntu 镜像名称
-i 标志保证容器中得STDIN(标准输入)是开启的
-t 为容器分配一个伪tty终端
ubuntu镜像是一个基础镜像(base image)。输入docker run命令时,会首先在本地检查是否存在ubuntu镜像,如果没有,就从远程仓库pull到本地,然后再根据此镜像创建容器。
[twx@localhost ~]$ sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repository docker.io/library/ubuntu ...
latest: Pulling from docker.io/library/ubuntu
43db9dbdcb30: Pull complete
2dc64e8f8d4f: Pull complete
670a583e1b50: Pull complete
183b0bfcd10e: Pull complete
Digest: sha256:c6674c44c6439673bf56536c1a15916639c47ea04c3d6296c5df938add67b54b
Status: Downloaded newer image for docker.io/ubuntu:latest
root@eaa81433c057:/#
容器创建成功后,会在容器中运行/bin/bash命令,启动bash shell。
我们可以输入hostname
查看容器的名字
root@eaa81433c057:/# hostname
eaa81433c057
exit
一旦退出容器,/bin/bash命令也就结束了,随之容器也就停止了运行。
sudo docker ps
查看正在运行的容器
sudo docker ps -a
查看所有容器
sudo docker ps -l
查看最后一次运行的容器
[twx@localhost ~]$ sudo docker run --name twx_the_container -i -t ubuntu /bin/bash
root@ea5e6646e432:/#
通过–name+ 名称 就能创建一个指定名称的容器了。
sudo docker start/stop + 容器名称
[twx@localhost ~]$ sudo docker start twx_the_container
twx_the_container
[twx@localhost ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea5e6646e432 ubuntu "/bin/bash" 3 minutes ago Up 34 seconds twx_the_container
[twx@localhost ~]$ sudo docker run --name daemon_dave -d ubuntu /bin/bash -c "while true;do echo hello world;sleep 1;done;"
[sudo] password for twx:
0df0744b2f405a4b79c55f574f37331dd0f8c7cdafe23903a82b04a272961e41
-d 将容器放到后台运行
sudo docker logs + 容器名称
sudo docker top+容器名称
sudo docker top daemon_dave
UID PID PPID C STIME TTY TIME CMD
root 9014 5145 0 16:11 ? 00:00:00
sudo docker exec + 参数+容器名称+命令
[twx@localhost ~]$ sudo docker exec -i -t daemon_dave /bin/bash
root@0df0744b2f40:/#
root@0df0744b2f40:/# sudo docker inspect daemon_dave
bash: sudo: command not found
root@0df0744b2f40:/# exit
exit
[twx@localhost ~]$ sudo docker inspect daemon_dave
[
{
"Id": "0df0744b2f405a4b79c55f574f37331dd0f8c7cdafe23903a82b04a272961e41",
"Created": "2016-08-08T08:11:37.29923545Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true;do echo hello world;sleep 1;done;"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 9014,
"ExitCode": 0,
"Error": "",
"StartedAt": "2016-08-08T08:11:37.950360729Z",
"FinishedAt": "0001-01-01T00:00:00Z"
}....
sudo docker rm + 容器名称
运行中得docker容器是无法删除的。
自行Google
sudo docker images
本地镜像都保存在Docker宿主机的/var/lib/docker目录下。
sudo docker pull +仓库名称/镜像名称
可以在仓库名后面加上一个冒号和标签名来指定该仓库中的某一镜像。
sudo docker search + 镜像名
[twx@localhost ~]$ sudo docker search s
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/oddrationale/docker-s s Docker image 86 [OK]
docker.io docker.io/tommylau/s 44 [OK]
docker.io docker.io/vimagick/s-libev A lightweight secured socks5 proxy for emb... 38 [OK]
docker.io docker.io/s/s-libev 26 [OK]
docker.io docker.io/vimagick/s A secure socks5 proxy, designed to protect... 9 [OK]
docker.io docker.io/menghan/s s server 6 [OK]
docker.io docker.io/imlonghao/s-libev A docker image for s-libev 4 [OK]
docker.io docker.io/frankzhang/s-c A s repo, https://github.com/zju... 2 [OK]
docker.io docker.io/imlonghao/s-python A docker image for s-python 2 [OK]
docker.io docker.io/baselibrary/s s 1 [OK]
docker.io docker.io/bluebu/s-privoxy s client for socks5 proxy privox... 1 [OK]
docker.io docker.io/chenzhiwei/s Shadowsocks socket proxy. (Image size 77M) 1 [OK]
docker.io docker.io/gaoyifan/s-manyuser s manyuser 1 [OK]
构建镜像有两种方式:
1. commit
2. 使用docker build命令 和Dockerfile 文件
[twx@localhost ~]$ sudo docker login
Username (slimteaegg): slimteaegg
Password:
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
sudo docker attach twx_the_container
root@ea5e6646e432:/# apt-get -y update
apt-get -y install apache2
sudo docker commit twx_the_container slimteaegg/apache2
sudo docker images
[twx@localhost ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slimteaegg/apache2 latest 7c048d3857dd 8 seconds ago 262.7 MB
docker.io/ubuntu latest 42118e3df429 2 weeks ago 124.8 MB
mkdir static_web
cd static_web
touch Dockerfile
#Version:0.0.1
FROM ubuntu:latest
MAINTAINER Tangwenxing "[email protected]"
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi,this is a test image' > /usr/share/nginx/html/index.html
EXPOSE 80
FROM:指定一个已经存在的镜像,后续指令都基于该镜像进行
MAINTAINER: 指定该镜像的作者以及作者的电子邮箱
RUN: 在当前镜像中运行指定的命令
EXPOSE:指定容器的端口。出于安全原因,Docker并不会自动打开该端口,而是需要在docker run 时指定需要打开哪些端口。
cd static_web
sudo docker build -t="slimteaegg/static_web" .
-t 为新镜像设定仓库和名称
该命令最后的.告诉Docker到本地目录中去找Dockerfile文件
[twx@localhost static_web]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
slimteaegg/static_web latest 7b096462ae9d 36 seconds ago 220.4 MB
slimteaegg/apache2 latest 7c048d3857dd 13 minutes ago 262.7 MB
docker.io/ubuntu latest 42118e3df429 2 weeks ago 124.8 MB
[twx@localhost static_web]$ sudo docker run -d -p 80 --name static_web slimteaegg/static_web nginx -g "daemon off;"
2c8e63093254bf1c34814ea8af97861940cf069aa63ff5114fc0116952e0a514
-d 告诉docker以分离(Detached)的方式在后台运行
-p 的用法有几种:
1.-p + 端口号 宿主机随机分配一个端口映射到容器端口号上
2. -p 8080:80 将宿主机的8080端口映射到容器80端口上。
Docker提供了一种更简单的方式,即-P参数。该参数可以用来对外公开在Dockerfile中得EXPOSE指令中设置的所有端口
sudo docker run -d -P --name static_web slimteaegg/static_web nginx -g "daemon off;"
该命令会将容器内的80端口对宿主机公开,并且绑定到宿主机的一个随机端口上。
docker port + 容器名+ 容器端口号
返回宿主机映射的端口号
[twx@localhost static_web]$ sudo docker port static_web 80
0.0.0.0:32768
sudo docker push slimteaegg/static_web