安装Docker

安装docker-ce以及客户端

[root@docker-server ~]# yum install wget.x86_64 -y
[root@docker-server ~]# rm -rf /etc/yum.repos.d/*
[root@docker-server ~]# wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker-server ~]# wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@docker-server ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker-server ~]# yum install docker-ce -y

启动docker

[root@docker-server ~]# systemctl enable docker.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@docker-server ~]# systemctl start docker.service 

Docker镜像管理

搜索镜像

[root@docker-server ~]# docker search centos

下载镜像

docker pull NAME:TAG

其中,NAME是镜像名称,TAG是镜像的标签(往往用来是表示版本信息),通常情况下,描述一个镜像需要包括名称+标签,如果不指定标签,标签的值默认为latest。

  • 下载nginx、centos、hello-world镜像
[root@docker-server ~]# docker pull nginx
[root@docker-server ~]# docker pull centos
[root@docker-server ~]# docker pull hello-world

查看镜像信息

[root@docker-server ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    d1a364dc548d   2 weeks ago    133MB
hello-world   latest    d1165f221234   3 months ago   13.3kB
centos        latest    300e315adb2f   6 months ago   209MB

给镜像打标签

为了方便在后续工作中使用特定镜像,可以使用docker tag命令来为本地镜像任意添加新的标签

[root@docker-server ~]# docker tag centos:latest mycentos:latest
[root@docker-server ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    d1a364dc548d   2 weeks ago    133MB
hello-world   latest    d1165f221234   3 months ago   13.3kB
centos        latest    300e315adb2f   6 months ago   209MB
mycentos      latest    300e315adb2f   6 months ago   209MB

获取镜像详细信息

[root@docker-server ~]# docker inspect centos:latest 

镜像导出

[root@docker-server ~]# docker save centos:latest > /opt/centos-1.tar.gz
[root@docker-server ~]# ll /opt/centos-1.tar.gz 
-rw-r--r-- 1 root root 216535040 6月   9 10:35 /opt/centos-1.tar.gz

镜像导入

[root@docker-server ~]# docker load < /opt/centos.tar.gz 
Loaded image: centos:latest

删除镜像

使用镜像名称或镜像id+标签

[root@docker-server ~]# docker rmi nginx:latest 

Docker容器管理

启动容器

前台启动

[root@docker-server ~]# docker run -it centos:latest bash
[root@4abaf8a399fe /]#

后台启动

加上-d命令

[root@docker-server ~]# docker run -d -p 80:80 --name nginx-2 nginx
c75333168c0dad9094d94828c33998294f2809ae8c5b60881707d9cc33ea4893

单次运行

容器退出后自动删除单次运行,容器退出后自动删除

[root@docker-server ~]# docker run --name hello_world_test --rm hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[root@docker-server ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

传递运行命令

容器需要由一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令

[root@docker-server ~]# docker run -d centos tail -f /etc/hosts
7b0700c01f9516f49e70ad92e7256d965e0fe4eb8ccc7b30676a03c1d8046c64
[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                CREATED         STATUS         PORTS     NAMES
7b0700c01f95   centos    "tail -f /etc/hosts"   3 seconds ago   Up 2 seconds             charming_brahmagupta

显示容器

#显示正在运行的容器
[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
#显示所有容器,包括停止的所有容器
[root@docker-server ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND   CREATED         STATUS      PORTS     NAMES
4abaf8a399fe   centos:latest   "bash"    2 minutes ago   Exited (0) 9 seconds ago      hardcore_perlman

端口映射

前台启动随机映射端口

[root@docker-server ~]# docker run -P nginx

指定端口映射

本地端口8080映射到容器80端口
[root@docker-server ~]# docker run -p 8080:80 --name nginx-1 nginx:latest

停止容器

挂起容器

[root@docker-server ~]# docker pause wizardly_hofstadter 

取消挂起容器

[root@docker-server ~]# docker unpause wizardly_hofstadte

终止容器

[root@docker-server ~]# docker stop wizardly_hofstadter 

删除容器

删除正在运行的容器

加上-f参数

[root@docker-server ~]# docker rm -f dfd5ba20c3c6

批量删除容器

[root@docker-server ~]# docker rm -f `docker ps -a -q`
#docker ps -a -q 为展示所有的容器的id

进入容器

exec——执行单次命令与进入容器,退出容器后容器还在运行

#启动一个容器
[root@docker-server ~]# docker run -d -it centos
129d518869d550e579bcff38608bae38209923dcbfab49c823d5e1473d38214a
[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS        PORTS     NAMES
129d518869d5   centos    "/bin/bash"   2 seconds ago   Up 1 second             jovial_haibt
#再次进入这个容器
[root@docker-server ~]# docker exec -it jovial_haibt /bin/bash
[root@129d518869d5 /]# echo hello
hello
[root@129d518869d5 /]# exit
exit
[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
129d518869d5   centos    "/bin/bash"   46 seconds ago   Up 45 seconds             jovial_haibt

容器导出

docker export

导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,导出一个容器快照

[root@docker-server ~]# docker run -d -it centos
43f2397b9456d27a3b84dba0d79ae9a1dd8dddf40440d7d73fca71cddea0e10d
[root@docker-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
43f2397b9456   centos    "/bin/bash"   2 seconds ago   Up 2 seconds             awesome_rubin
[root@docker-server ~]# docker export -o /opt/centos.tar 43f2397b9456 
[root@docker-server ~]# ll /opt/centos.tar
-rw------- 1 root root 216525312 6月   9 13:28 /opt/centos.tar

容器导入

docker import

导出的文件可以使用docker import命令导入变成镜像,导入一个容器快照到本地镜像库

[root@docker-server ~]# docker import /opt/centos.tar mycentos:v1
sha256:acf250a6cabb56e0464102dabedb0a562f933facd3cd7b387e665459da46bf29
[root@docker-server ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
mycentos      v1        acf250a6cabb   9 seconds ago   209MB
nginx         latest    d1a364dc548d   2 weeks ago     133MB
hello-world   latest    d1165f221234   3 months ago    13.3kB
centos        latest    300e315adb2f   6 months ago    209MB