Docker和虚拟机一样,都拥有环境隔离的能力,但它比虚拟机更加轻量级,可以使资源更大化地得到应用
  • Client(Docker客户端):是Docker的用户界面,可以接受用户命令(docker build,docker pull...)和配置标识,并与Docker daemon通信
  • Images(Docker镜像):是一个只读模板,含创建Docker容器的说明,它与操作系统的安装光盘有点像
  • Containers(容器):镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象
  • Registry:是一个集中存储与分发镜像的服务。最常用的Docker Registry是官方的Docker Hub 

docker-ce与docker-io的区别?

Docker有两个主要版本:docker.io和docker-ce。Docker.io是早期版本的Docker,而docker-ce是Docker社区版(Community Edition)的缩写,是Docker的当前主要版本。

Docker.io与docker-ce之间的最大区别在于支持的平台和版本更新频率。Docker.io支持的平台相对较少,包括Ubuntu、Fedora、Debian等。此外,Docker.io的版本更新频率相对较低,可能会导致在某些情况下出现更新延迟的问题。

相比之下,docker-ce支持更广泛的平台,包括Windows、MacOS、CentOS、RHEL等,并且更新频率更高,包括每个月的安全更新和每季度的功能更新。此外,docker-ce还包括对Swarm等Docker工具的支持,并具有更丰富的社区支持和文档资料。

总之,docker-ce是当前主要版本的Docker,支持更广泛的平台和更高的版本更新频率,具有更多的功能和更丰富的社区支持。

Docker安装

ubuntu

docker.io安装

apt-get install -y docker.io
# 查看docker状态
systemctl status docker
# 如果没有启动,就手动启动
systemctl start docker
# 设置开机自启
systemctl enable docker

如果提示: Package ‘docker.io‘ has no installation candidate

 配置阿里云的gpg 

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

配置阿里云的镜像 

sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" 

再次执行 :apt-get install -y docker.io

docker.ce安装

设置 Docker 的apt存储库。

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装 Docker 软件包。

 sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

CentOS7系统下安装Docker

yum -y install docker

启动docker后台服务:

service docker start

验证是否安装成功:

root@localhost hemi]# docker version

镜像加速

鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决,我使用的是网易的镜像地址:http://hub-mirror.c.163.com。

新版的 Docker 使用 /etc/docker/daemon.json(Linux)

请在该配置文件中加入(没有该文件的话,请先建一个):

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

Docker常用命令

镜像常用命令

1)搜索镜像

可以在Docker Hub主页上搜索镜像,可以通过docker search命令搜索,如:

docker search [OPTIONS] TERM

OPTIONS说明:

  • --automated : 只列出 automated build类型的镜像;
  • --no-trunc : 显示完整的镜像描述;
  • -s : 列出收藏数不小于指定值的镜像。

[root@localhost hemi]# docker search -s 20 tomcat

其中,

STARTS:镜像仓库收藏数

AUTOMATED:表示是否是自动构建的镜像仓库

2)下载镜像

docker pull [OPTIONS] NAME[:TAG]

OPTIONS说明:

  • -a :拉取所有 tagged 镜像 
  • --disable-content-trust :忽略镜像的校验,默认开启

举个栗子

docker pull java   #从Docker Hub中下载最新版本的Java镜像
docker pull reg.itmuch.com/java:8    #从指定Registry中下载标签为8的Java镜像

3)列出镜像

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:  

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests :显示镜像的摘要信息
  • -f :显示满足条件的镜像;
  • --format :指定返回值的模板文件;
  • --no-trunc :显示完整的镜像信息;
  • -q :只显示镜像ID。

举个栗子:

列出本地镜像中REPOSITORY为ubuntu的镜像列表

[hemi@localhost ~]$ docker images ubuntu

4)删除本地镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS说明:  

  • -f :强制删除;
  • --no-prune :不移除该镜像的过程镜像,默认移除;

容器常用命令

 1)新建并启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

 OPTIONS说明(常用):

  • -d: 后台运行容器,并返回容器ID;
  • --name="nginx-lb": 为容器指定一个名称;
  • -i:以交互模式运行容器,通常与 -t 同时使用;
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -P: 随机端口映射;
  • -p: 指定端口映射,有以下四种格式
    • ip:hostPort:containerPort
    • ip::containerPort
    • hostPort:containerPort
    • containerPort
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container:<name|id> 四种类型;

 如:

docker run --name mynginx -d nginx:latest
#使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

docker run -p 91:80 -v /data:/data -d nginx:latest
#使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的91端口,主机的目录/data映射到容器的/data。

[hemi@localhost ~]$ docker run -it nginx:latest /bin/bash 
root@b8573233d675:/# 
#使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

2)列出容器

docker ps [OPTIONS]

 OPTIONS说明(常用):

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • --format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • --no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。

3)停止容器

docker stop CONTAINER_ID/CONTAIN_NAME

4)强制停止容器

docker kill CONTAINER_ID/CONTAIN_NAME

5)启动已停止容器

docker start CONTAINER_ID/CONTAIN_NAME

6)重启容器

docker restart CONTAINER_ID/CONTAIN_NAME

7)进入容器

docker exec -it CONTAINER_ID bash

如:

[hemi@localhost ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                    NAMES
219371844a81        7f94db72116e        "tomcat.sh"         7 seconds ago       Up 7 seconds        8009/tcp, 8080/tcp, 0.0.0.0:91->80/tcp   zen_kalam
[hemi@localhost ~]$ docker exec -it 219371844a81 bash
bash-4.2$ 

8)删除容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]

 OPTIONS说明(常用):

  • -f :通过SIGKILL信号强制删除一个运行中的容器
  • -l :移除容器间的网络连接,而非容器本身
  • -v :-v 删除与容器关联的卷

提交容器更改保存为新镜像

docker commit -m "change" 202df25a547a  mycentos:v5

 202df25a547a:容器id            mycentos:v5 镜像名:标签               

docker容器和宿主机之间复制文件

从主机复制到容器sudo docker cp host_path containerID:container_path

从容器复制到主机sudo docker cp containerID:container_path host_path

docker rm `docker ps -a -q` 删除所有容器

拷贝配置文件到宿主机:
docker cp 容器名称或者容器id :容器地址  宿主机地址
docker cp  tensquare_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml  /usr/share/elasticsearch.yml
容器与系统时间同步:
1.共享主机的localtime  
创建容器的时候指定启动参数,挂载localtime文件到容器内,保证两者所采用的时区是一致的。 # docker run -ti -d --name my-nginx -v /etc/localtime:/etc/localtime:ro docker.io/nginx /bin/bash
2.复制主机的localtime
docker cp /etc/localtime 87986863838b:/etc/
3.创建dockerfile文件的时候,自定义该镜像的时间格式及时区。在dockerfile文件里添加下面内容:
......
FROM tomcat
ENV CATALINA_HOME /usr/local/tomcat
.......
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
......
查看日志:docker logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f : 跟踪日志输出

  • --since :显示某个开始时间的所有日志

  • -t : 显示时间戳

  • --tail :仅列出最新N条容器日志

docker logs --tail=10 f8cded9f66e5

docker logs -f f8cded9f66e5

镜像(image)保存到本地

docker save [镜像id]> /path/文件名.tar
例如:docker save 267ffb4c34c2> /home/kangkang/Desktop/dockertest/test.tar

镜像(image)加载到本地docker

把下载好的文件test.tar拷贝到需要加载镜像的电脑中
docker load < /path/文件名.tar
例:docker load < /home/kaka/test.tar

docker image ls 后发现镜像(image)名和版本都为空
用docker tag [镜像id] 镜像名:版本号
docker tag ab67ffb4c97c2 myimagesload:v1.0.1

运行 docker run ab67ffb4c97c2

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐