从零开始的Docker [ 1 ] --- 开启新篇章-Docker入门:安装使用 和 docker制作

云计算核心:Docker

一、安装

1.Docker加速器

使用Aliyun Docker Yum源安装Docker

yum install -y yum-utils device-mapper-persistent-data lvm2 git
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2.安装指定版本

查看版本

yum list docker-ce --showduplicates

安装较旧版本(比如Docker 17.03.2) :
需要指定完整的rpm包的包名,并且加上–setopt=obsoletes=0 参数:

yum install -y --setopt=obsoletes=0 \
   docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
   docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

安装最新版

yum install docker-ce -y

二、启动docker

systemctl start docker 
systemctl enable docker

查看docker 版本

docker -v

查看docker 启动状态

docker version

查看docker 运行状态

docker info

三、镜像管理

搜索镜像 [任意关键词]

这种方法只能用于官方镜像库

扫描二维码关注公众号,回复: 12417318 查看本文章
docker search centos

按星级搜索镜像

查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 ubuntu 镜像

docker search ubuntu -f stars=100  

拉取镜像

docker pull centos

查看本地镜像

docker images

四、 使用镜像

1.使用阿里云镜像源 加速镜像下载

需要登录阿里云服务器 不需要有云服务器
具体操作摘自 某位运维开发的文章 把 Docker 容器当做虚拟机使用

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
    
    
  "registry-mirrors": ["https://********.mirror.aliyuncs.com"]
}
EOF

2.启动镜像

sudo systemctl daemon-reload
sudo systemctl restart docker

3.查看镜像详情

docker ps -a

4.删除镜像

删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id

docker rm docker-1

强制删除:–force

如果镜像正在被使用中可以使用–force强制删除

docker rm docker-1 --force

删除所有镜像

docker rm $(docker images -q)

只查看所有镜像的id

docker images -q 

查看镜像制作的过程,相当于Dockerfile

docker history daocloud.io/ubuntu

给镜像打tag

docker tag daocloud.io/ubuntu   daocloud.io/ubuntu:v1

5.进入容器

docker run -it centos

6.关闭容器

docker stop  docker-1

五、什么是Docker?[演示]

模拟一个文件系统

[root@docker ~]# cd
[root@docker ~]# mkdir t

#模拟一个文件系统
[root@docker ~]# mkdir t/{bin,lib64,etc,home,root}
[root@docker ~]# ls t/
bin  etc  home  lib64  root

#把ls命令放到我的文件系统内
[root@docker ~]# cp /usr/bin/ls t/
[root@docker ~]# ls t/
bin  etc  home  lib64  ls  root
[root@docker ~]# ldd /usr/bin/ls |grep -oP '/lib64/\S+'
/lib64/libselinux.so.1
/lib64/libcap.so.2
/lib64/libacl.so.1
/lib64/libc.so.6
/lib64/libpcre.so.1
/lib64/libdl.so.2
/lib64/ld-linux-x86-64.so.2
/lib64/libattr.so.1
/lib64/libpthread.so.0
[root@docker ~]# ldd /usr/bin/ls |grep -oP '/lib64/\S+' | cp  `xargs` t/lib64/
[root@docker ~]# ls t/lib64/
ld-linux-x86-64.so.2  libattr.so.1  libc.so.6   libpcre.so.1     libselinux.so.1
libacl.so.1           libcap.so.2   libdl.so.2  libpthread.so.0
[root@docker ~]# ls t/
bin  etc  home  lib64  ls  root
[root@docker ~]# chroot t /ls
bin  etc  home  lib64  ls  root

#把bash命令放到我的文件系统内
[root@docker ~]# cp /bin/bash t/
[root@docker ~]# ldd /bin/bash |grep -oP '/lib64/\S+' |cp  `xargs` t/lib64/
[root@docker ~]# chroot t/ 
bash-4.2# echo "hah"
hah
[root@docker ~]# tar -czf t.tar t
[root@docker ~]# ls t.tar
t.tar
#这里的 t.tar 就是一个 Docker [容器]

六、Docker容器的制作

1.创建新容器但不启动

需要持续交互 使用 -it

docker create -it daocloud.io/library/centos:5 /bin/bash

更多参数

  -i  
   捕获标准输入输出
  -t  
   分配一个终端或控制台
  -d
   后台启动 
  --restart=always  
   容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭  
   也适用于create选项    
  --rm
   默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。
    但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用

  容器名称
  --name= Assign a name to the container   
          --为容器分配一个名字,如果没有指定,docker会自动分配一个随机名称
          是docker run子命令的参数
  可以通过三种方式调用容器命名:
  1)使用UUID长命名("f78375b1c487e03c9438c729345e54db9d20cfa2ac1fc3494b6eb60872e74778")
  2)使用UUID短Id("f78375b1c487")
  3)使用Name("docker-1") 

    这个UUID标识是由Docker deamon生成的。
  如果你在执行docker run时没有指定--name,那么deamon会自动生成一个随机字符串UUID。
  但是对于一个容器来说有个name会非常方便,当你需要连接其它容器时或者类似需要区分其它容器时,使用容
  器名称可以简化操作。无论容器运行在前台或者后台,这个名字都是有效的。

保存容器PID equivalent:
如果在使用Docker时有自动化的需求,你可以将containerID输出到指定的文件中(PIDfile),类似于某些应用程序将自身ID输出到文件中,方便后续脚本操作。
--cidfile="": Write the container ID to the file

启动容器

启动容器必须需要启动容器的时候需要有 -d 参数
否则不会启动成功

docker start docker-1

停止容器

docker stop docker-1
docker kill docker-1   # 强制终止容器

查看所有容器

docker ps -a

-a 所有

查看已启动容器

docker ps

查看所有容器id

docker ps -a -q

2.自启动

容器随docker engine自启动

因为在重启docker的时候默认容器都会被关闭

docker run -it --restart=always centos /bin/bash

3.查看容器详细信息

docker inspect 0  #这里0 是我机器上运行的唯一标识id
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
04270d042318   centos    "/bin/bash"   2 minutes ago    Up 2 minutes              docker-3
e63dca6e4930   centos    "/bin/bash"   23 minutes ago   Up 15 seconds             docker-1
[root@docker ~]# docker inspect 0
[
    {
    
    
        "Id": "04270d0423180793d5a2959124818534911b4d5abca6d21f5d1d2cf721cf2bc9",
        "Created": "2021-01-12T08:49:40.365041161Z",
        "Path": "/bin/bash",
...

根据格式删除容器

docker rm $(docker ps -qf status=exited)

查看系统历史命令

docker logs docker-1

查看所有进程

docker容器中的top 命令

 docker top docker-1

复制

docker cp xxxx

4.创建对应端口的应用服务

docker run -d -p 8090:80 --name nginx nginx

docker run -d -p 6379:80 --name redis redis
[root@docker ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS             PORTS                            NAMES
68c99094b335   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 5 seconds       0.0.0.0:8090->80/tcp             nginx
560de3c6cbff   redis     "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes       6379/tcp, 0.0.0.0:6379->80/tcp   redis
e63dca6e4930   centos    "/bin/bash"              2 hours ago     Up About an hour                                    docker-1

5.创建任务 exec

#交互型

docker exec -itd docker-1 touch 1.txt
docker exec  docker-1 mkdir test

#后台型

docker exec  docker-1 touch 2.txt

#进入容器

docker exec -it e63 bash

6.查看容器内发生改变的文件

包括文件的创建、删除和文件内容的改变都能看到

[root@docker ~]# docker diff docker-1
A /test
A /2.txt
A /1.txt

7.连接容器[进入容器]

docker attach docker

或者

docker exec -it  e63 

进入

[root@docker ~]# docker  attach docker-1
[root@e63dca6e4930 /]# ls
1.txt  bin  etc   lib  lost+found  mnt  proc run   srv  test  usr
2.txt  dev  home  lib64  media      opt  root sbin  sys  tmp  var

七、CPU 限制

先写一个脚本,让他无限占用cpu

[root@localhost ~]# cat /root/shark.sh 
while true
do
  true
done

然后执行他 cpu会飙升到100%

[root@localhost ~]# sh /root/shark.sh  &
[1] 69950

查看进程 记住进程号

[root@localhost ~]# top
   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                          
 69950 root      20   0  113280   1196   1020 R 70.8  0.1   0:32.11 sh  

进入cpu配置文件 创建一个新文件夹

[root@localhost cpu]# mkdir t
[root@localhost t]# pwd
/sys/fs/cgroup/cpu/t
[root@localhost t]# echo 20000 >  cpu.cfs_quota_us  # 20000 表示最高占用cpu不超过20% 自己视情况而定
[root@localhost t]# echo  64514 > tasks  # 把刚刚的进程号写入这个文件内

#cpu的负载就会到达你所期望的值

八、卸载删除已安装Docker

yum remove docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-selinux \
        docker-engine-selinux \
        docker-engine

猜你喜欢

转载自blog.csdn.net/Houaki/article/details/112547536