本次环境使用Centos 7.x
版本系统,最小化安装,系统基础优化配置请查看 Centos 7.x 系统基础优化php
安装html
使用命令:
yum install docker-io -y
node
[root@node ~]# yum install docker-io -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * elrepo: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com Resolving Dependencies --> Running transaction check ---> Package docker.x86_64 2:1.13.1-68.gitdded712.el7.centos will be installed --> Processing Dependency: docker-common = 2:1.13.1-68.gitdded712.el7.centos for package: 2:docker-1.13.1-6 8.gitdded712.el7.centos.x86_6 .......................................................................... .......................................................................... Installed: docker.x86_64 2:1.13.1-68.gitdded712.el7.centos Dependency Installed: audit-libs-python.x86_64 0:2.8.1-3.el7 checkpolicy.x86_64 0:2.5-6.el7 container-selinux.noarch 2:2.66-1.el7 container-storage-setup.noarch 0:0.10.0-1.gitdf0dcd5.el7 docker-client.x86_64 2:1.13.1-68.gitdded712.el7.centos docker-common.x86_64 2:1.13.1-68.gitdded712.el7.centos libcgroup.x86_64 0:0.41-15.el7 libsemanage-python.x86_64 0:2.5-11.el7 oci-register-machine.x86_64 1:0-6.git2b44233.el7 oci-systemd-hook.x86_64 1:0.1.16-1.git05bd9a0.el7 oci-umount.x86_64 2:2.3.3-3.gite3c9055.el7 policycoreutils-python.x86_64 0:2.5-22.el7 python-IPy.noarch 0:0.75-6.el7 setools-libs.x86_64 0:3.3.8-2.el7 skopeo-containers.x86_64 1:0.1.31-1.dev.gitae64ff7.el7.centos yajl.x86_64 0:2.0.4-4.el7 Complete!
启动关闭dockerpython
启动docker:systemctl start docker
关闭docker:systemctl stop docker
设置开机自启:systemctl enable dockermysql
[root@node ~]# systemctl start docker [root@node ~]# systemctl enable docker [root@node ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2018-08-21 12:13:47 CST; 3s ago Docs: http://docs.docker.com Main PID: 1375 (dockerd-current) CGroup: /system.slice/docker.service ├─1375 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-cur... └─1383 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-cont... Aug 21 12:13:46 node dockerd-current[1375]: time="2018-08-21T12:13:46.884994505+08:00" level=warning...tem" Aug 21 12:13:46 node dockerd-current[1375]: time="2018-08-21T12:13:46.958221978+08:00" level=info ms...nds" Aug 21 12:13:46 node dockerd-current[1375]: time="2018-08-21T12:13:46.959354596+08:00" level=info ms...rt." Aug 21 12:13:47 node dockerd-current[1375]: time="2018-08-21T12:13:47.017988947+08:00" level=info ms...rue" Aug 21 12:13:47 node dockerd-current[1375]: time="2018-08-21T12:13:47.196687154+08:00" level=info ms...ess" Aug 21 12:13:47 node dockerd-current[1375]: time="2018-08-21T12:13:47.343822834+08:00" level=info ms...ne." Aug 21 12:13:47 node dockerd-current[1375]: time="2018-08-21T12:13:47.712563117+08:00" level=info ms...ion" Aug 21 12:13:47 node dockerd-current[1375]: time="2018-08-21T12:13:47.712714528+08:00" level=info ms...13.1 Aug 21 12:13:47 node dockerd-current[1375]: time="2018-08-21T12:13:47.720577957+08:00" level=info ms...ock" Aug 21 12:13:47 node systemd[1]: Started Docker Application Container Engine. Hint: Some lines were ellipsized, use -l to show in full.
这样,docker就安装完成了。linux
命令:docker --helpnginx
[root@node ~]# docker --help Usage: docker COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -D, --debug Enable debug mode --help Print usage -H, --host list Daemon socket(s) to connect to (default []) -l, --log-level string Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: container Manage containers image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker volume Manage volumes Commands: attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes Run 'docker COMMAND --help' for more information on a command.
参数 | 解释 |
---|---|
attach | 进入到正在运行的容器 |
build | 构建docker文件镜像 |
commit | 建立一个镜像修改容器 |
cp | 在容器和本地复制文件和文件夹 |
create | 建立一个容器 |
diff | 检查容器系统上文件是否发生改变 |
events | 重服务器获取实时推送 |
exec | 在容器中运行命令 |
export | 将容器的文件系统导出为tar存档 |
history | 显示镜像的历史变革 |
images | 列出全部镜像文件 |
import | 从 tarball导入文件内容到建立一个系统镜像文件 |
info | 查看信息 |
inspect | 返回底层信息的docker对象 |
kill | 终止一个或多个正在运行的容器 |
load | 加载图像到一个tar归档文件或STDIN |
login | 登录某个docker之中 |
logout | 退出某个docker |
logs | 获取容器运行的日志 |
pause | 暂停一个或多个容器进程 |
port | 查看全部映射信息 |
ps | 查看全部正在运行的容器 |
pull | 拉取一个镜像或者仓库到源 |
push | 提交一个镜像或者仓库到源 |
rename | 重命名一个容器 |
restart | 重启一个或者多个容器 |
rm | 删除一个或者多个容器 |
rmi | 删除一个或者多个镜像 |
run | 运行一个新的容器 |
save | 保存一个或者多个镜像 |
search | 在Docker Hub上查找镜像 |
stats | 显示一个容器的资源使用情况 |
stop | 中止一个或者多个容器 |
tag | 给一个指定的镜像建立一个标签 |
top | 显示正在运行的容器进程 |
uppause | 赞同一个或者多个容器的全部进程 |
update | 更新一个或者多个容器的配置 |
version | 显示Docker版本号 |
wait | 组织一个或者多个容器中止,而后打印他们推出的输出 |
docker构建了一个相似于github同样的仓库git
搜索镜像github
搜索centos
镜像:docker search Docker-namesql
[root@node ~]# docker search centos INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/centos The official build of CentOS. 4585 [OK] docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 115 [OK] docker.io docker.io/jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x... 99 [OK] docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 61 [OK] docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 44 [OK] docker.io docker.io/tutum/centos Simple CentOS docker image with SSH access 43 docker.io docker.io/centos/mysql-57-centos7 MySQL 5.7 SQL database server 38 docker.io docker.io/gluster/gluster-centos Official GlusterFS Image [ CentOS-7 + Glu... 32 [OK] docker.io docker.io/openshift/base-centos7 A Centos7 derived base image for Source-To... 31 docker.io docker.io/centos/python-35-centos7 Platform for building and running Python 3... 28 docker.io docker.io/centos/postgresql-96-centos7 PostgreSQL is an advanced Object-Relationa... 26 docker.io docker.io/kinogmt/centos-ssh CentOS with SSH 22 [OK] docker.io docker.io/centos/php-56-centos7 Platform for building and running PHP 5.6 ... 14 docker.io docker.io/openshift/jenkins-2-centos7 A Centos7 based Jenkins v2.x image for use... 14 docker.io docker.io/pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag nam... 7 docker.io docker.io/openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 ima... 6 docker.io docker.io/openshift/jenkins-1-centos7 DEPRECATED: A Centos7 based Jenkins v1.x i... 4 docker.io docker.io/openshift/wildfly-101-centos7 A Centos7 based WildFly v10.1 image for us... 4 docker.io docker.io/darksheer/centos Base Centos Image -- Updated hourly 3 [OK] docker.io docker.io/pivotaldata/centos Base centos, freshened up a little with a ... 2 docker.io docker.io/pivotaldata/centos-mingw Using the mingw toolchain to cross-compile... 2 docker.io docker.io/blacklabelops/centos CentOS Base Image! Built and Updates Daily! 1 [OK] docker.io docker.io/jameseckersall/sonarr-centos Sonarr on CentOS 7 0 [OK] docker.io docker.io/pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated ... 0 docker.io docker.io/smartentry/centos centos with smartentry 0 [OK]
说明:
列名 | 说明 |
---|---|
INDEX | 索引 |
NAME | 镜像名称 |
DESCRIPTION | 描述 |
STARS | 星级,受欢迎的程度 |
OFFICIAL | 是不是官方的 |
AUTOMATED | 是不是自动构建的 |
须要注意的:NAME,官方的,就是Centos,而剩下的,是用户名/名称
获取镜像
命令:docker pull Docker-name
[root@node ~]# docker pull centos Using default tag: latest Trying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos 256b176beaff: Pull complete Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024faf Status: Downloaded newer image for docker.io/centos:lates
查看镜像
命令:docker images
[root@node ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/centos latest 5182e96772bf 2 weeks ago 200 MB
字段名 | 解释 |
---|---|
REPOSITORY | 镜像来自于那个仓库 |
TAG | 镜像的标签 |
IMAGE ID | 镜像的ID,每一个镜像都有一个惟一的ID |
CREATED | 建立的时间 |
VIRTUAL SIZE | 镜像的大小 |
此时,镜像也pull
下来了,准备工做都作好了,下面就开始让docker作一些简单的事情了。
让docker输出点东西出来
命令:docker run centos /bin/echo 'Hello World.'
意思是:运行
centos
容器,并/bin/echo 输出'Hello World.'
[root@node ~]# docker run centos /bin/echo 'Hello World.' Hello World.
查看运行或者中止的全部容器
命令:docker ps -a
参数: -l 表示只显示最后一个容器 (小写的L
)
[root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 99ceccfc37ac centos "/bin/echo 'Hello ..." 2 minutes ago Exited (0) 2 minutes ago elegant_gates
字段名 | 解释 |
---|---|
CONTAINER ID | 容器 ID |
IMAGE | 镜像 |
COMMAND | 运行的内容 |
CREATED | 建立时间 |
STSTUA | 容器状态 |
PORTS | 其余 |
NAMES | 容器名,若是不手动指定,则在名字库中随机获取一个 |
docker run 的参数
参数 | 解释 |
---|---|
-a=map[] | 附加标准输入、输出或者错误输出 |
-c=0 | 共享CPU格式(相对重要) |
-cidfile=“” | 将容器的ID标识写入文件 |
-d=false | 分离模式,在后台运行容器,而且打印出容器ID |
-e=[] | 设置环境变量 |
-h=“” | 容器的主机名称 |
-i=false | 保持输入流开放即便没有附加输入流 |
-privileged=false | 给容器扩展的权限 |
-m=“” | 内存限制 (格式:, unit单位 = b, k, m or g) |
-n=true | 容许镜像使用网络 |
-p=[] | 匹配镜像内的网络端口号 支持格式:ip:hostPort:containerPort |
-rm=false | 当容器退出时自动删除容器 (不能跟 -d一块儿使用) |
-t=false | 分配一个伪造的终端输入 |
-u=“” | 用户名或者ID |
-dns=[] | 自定义容器的DNS服务器 |
-v=[] | 建立一个挂载绑定:[host-dir]:[container-dir]:[rw |
-volumes-from=“” | 挂载容器全部的卷 |
-entrypoint=“” | 覆盖镜像设置默认的入口点 |
-w=“” | 工做目录内的容器 |
-lxc-conf=[] | 添加自定义-lxc-conf=“lxc.cgroup.cpuset.cpus = 0,1″ |
-sig-proxy=true | 代理接收全部进程信号(even in non-tty mode) |
-expose=[] | 让你主机没有开放的端口 |
-link=“” | 链接到另外一个容器(name:alias) |
-name=“” | 分配容器的名称,若是没有指定就会随机生成一个 ,容器的名称是惟一的。 |
-P=false | Publish all exposed ports to thehost interfaces 公布全部显示的端口主机接口 |
docker容器也能当作正常的操做系统来使用,虽然不建议
命令:docker run --name 随意指定一个docker名称 -it 镜像名 /bin/bash
-i 表示进入到容器的输入终端
-t 表示开启一个伪终端tty
绑定到表输入上
[root@node ~]# docker run --name mydocker -it centos /bin/bash # 这里看到运行后,提示符都变了,这个提示符是该容器的ID值 [root@7c9a7f01acb4 /]# ls anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # 执行ps aux 只能够看到两个进程 [root@7c9a7f01acb4 /]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 11832 3036 ? Ss 05:52 0:00 /bin/bash root 15 0.0 0.0 51720 3512 ? R+ 05:53 0:00 ps aux # 能够建立一个文件或目录 [root@7c9a7f01acb4 /]# cd /tmp/ [root@7c9a7f01acb4 tmp]# mkdir mydocker [root@7c9a7f01acb4 tmp]# ls -ld mydocker/ drwxr-xr-x 2 root root 6 Aug 22 05:57 mydocker/ # 查看该容器的ip地址 [root@7c9a7f01acb4 tmp]# yum install net-tools [root@7c9a7f01acb4 tmp]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:2 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 3748 bytes 12494964 (11.9 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2696 bytes 149466 (145.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # 使用exit退出容器 [root@7c9a7f01acb4 tmp]# exit exit # 退出后,能够看到命令提示符也变回原来的了。 [root@node ~]#
在执行上述命令的过程都干啥了?
在容器中能够正常操做,只是有不少命令都没有
退出后,再次查看一下容器状态
[root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c9a7f01acb4 centos "/bin/bash" 10 minutes ago Exited (127) 44 seconds ago mydocker 99ceccfc37ac centos "/bin/echo 'Hello ..." 35 minutes ago Exited (0) 35 minutes ago elegant_gates
能够看到容器名是咱们指定的,而且已经退出了,生命周期已经结束了。
启动一个中止的容器
命令:docker start 容器ID
# 经过docker ps -a 查看容器ID [root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c9a7f01acb4 centos "/bin/bash" 10 minutes ago Exited (127) 44 seconds ago mydocker 99ceccfc37ac centos "/bin/echo 'Hello ..." 35 minutes ago Exited (0) 35 minutes ago elegant_gates # 运行 [root@node ~]# docker start 99ceccfc37ac 99ceccfc37ac #再次查看 [root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c9a7f01acb4 centos "/bin/bash" 13 minutes ago Exited (127) 3 minutes ago mydocker 99ceccfc37ac centos "/bin/echo 'Hello ..." 38 minutes ago Exited (0) 2 seconds ago elegant_gates
这里看到运行后查看也退出了,由于咱们运行的容器只是输出了一个'Hello World.'程序就退出了,容器也就结束了。
中止一个容器
命令:docker stop 容器ID
这里就不演示了。
删除一个容器
命令:docker rm 容器ID
正常只能删除已经中止的容器,若是是启动状态,会报错,除非增长-f
参数强制删除。
[root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7c9a7f01acb4 centos "/bin/bash" 13 minutes ago Exited (127) 3 minutes ago mydocker 99ceccfc37ac centos "/bin/echo 'Hello ..." 38 minutes ago Exited (0) 2 seconds ago elegant_gates [root@node ~]# docker rm 7c9a7f01acb4 7c9a7f01acb4 # 这里能够看到已经被删除了。 [root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 99ceccfc37ac centos "/bin/echo 'Hello ..." 45 minutes ago Exited (0) 7 minutes ago elegant_gates
启动一个nginx容器
因为没有先pull 下来nginx镜像,因此在启动的时候会自动下载
[root@node ~]# docker run -d --name mynginx nginx Unable to find image 'nginx:latest' locally Trying to pull repository docker.io/library/nginx ... latest: Pulling from docker.io/library/nginx be8881be8156: Pull complete 32d9726baeef: Pull complete 87e5e6f71297: Pull complete Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424 Status: Downloaded newer image for docker.io/nginx:latest # 启动的nginx容器的容器ID 2a6782e62a5fc419396c68a690f8673b989188ef28f18161f03811e7f0014251 # 查看容器,能够看到nginx容器正在运行 [root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a6782e62a5f nginx "nginx -g 'daemon ..." 11 seconds ago Up 10 seconds 80/tcp mynginx
进入到刚刚启动的容器当中
[root@node ~]# docker attach 2a6782e62a5f ^C[root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a6782e62a5f nginx "nginx -g 'daemon ..." About a minute ago Exited (0) 5 seconds ago mynginx # 使用control + C 退出后,再次查看容器,会发现容器已经退出了
这里会发现进不去,一直夯在这里,实际以及进去了,只是卡住了
这是个通病,因此通常不适用该工具进入到容器中,使用另外一个工具;
使用nsenter
工具进入到容器的namespace命名空间
默认Centos 应该会有这个命令,若是没有,则只须要安装:
yum install util-linux -y
这样就能够了。
从新启动nginx容器,而后经过nsenter工具进入到容器中.
[root@node ~]# docker start 2a6782e62a5f 2a6782e62a5f [root@node ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2a6782e62a5f nginx "nginx -g 'daemon ..." 2 minutes ago Up 4 seconds 80/tcp mynginx
经过下面命令获取到容器的PID:
docker inspect --format "{{.State.Pid}}" 容器名称或容器ID
[root@node ~]# docker inspect --format "{{.State.Pid}}" mynginx 3982 [root@node ~]# nsenter --target 3982 --mount --uts --ipc --net --pid mesg: ttyname failed: No such file or directory root@2a6782e62a5f:/# /etc/init.d/nginx status [ ok ] nginx is running.
从上述能够看到,已经进入到了nginx的容器中了。