Docker的安装和基本使用


目录

  1. MacOS安装Docker
  2. Linux安装Docker
  3. Docker部署Nginx实践
  4. Docker的常用命令

参考

MacOS安装Docker

Linux安装Docker

  1. 查看当前的内核版本

Linux 内核:官方建议 3.10 以上,3.8以上貌似也可。

uname -r
  1. 使用 root 权限更新 yum 包
yum -y update

这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了

注意 
yum -y update:升级所有包同时也升级软件和系统内核; 
yum -y upgrade:只升级所有包,不升级软件和系统内核
  1. 卸载旧版本(如果之前安装过的话)
yum remove docker  docker-common docker-selinux docker-engine
  1. 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

    yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 查看可用版本有哪些

yum list docker-ce --showduplicates | sort -r
  1. 选择一个版本并安装:yum install docker-ce-版本号

    yum -y install docker-ce-18.03.1.ce
  2. 启动 Docker 并设置开机自启

    systemctl start docker
    systemctl enable docker

Docker部署Nginx实践

  1. 拉取nginx镜像

默认最新版本latest

docker pull nginx
  1. 在宿主机中设置挂在目录
mkdir -p /data/nginx/{conf,conf.d,html,log}

image-20211130162322421

  1. 配置文件放置挂在目录
#user www-data;
worker_processes auto;
#pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

        server{
                listen 80;
                server_name your_server_name;   #你的serverName
                root /usr/share/nginx/html;
                index index.html;
        }

}
  1. 启动nginx容器
docker run 
--name my_nginx
-d -p 80:80  
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /data/nginx/log:/var/log/nginx 
-v /data/nginx/html:/usr/share/nginx/html
nginx

第一个-v:挂载nginx的主配置文件,以方便在宿主机上直接修改容器的配置文件

第二个-v:挂载容器内nginx的日志,容器运行起来之后,可以直接在宿主机的这个目录中查看nginx日志

第三个-v:挂载静态页面目录

  1. 效果如下:

image-20211130163158525

Docker的常用命令

$  docker search httpd

获取镜像 docker pull

$ docker pull ubuntu
$ docker pull ubuntu:15.10

本地镜像列表 docker images

$ docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago         182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB
ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB
hello-world         latest              690ed74de00f        6 months ago        960 B
training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB

镜像重命名标签 docker tag

$ docker tag 860c279d2fec runoob/centos:dev
  • 860c279d2fec是镜像ID
  • runoob/centos是目标REPOSITORY
  • dev是目标标签

删除镜像 docker rmi

删除 hello-world 镜像

$ docker rmi hello-world

构建镜像 docker build

使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
 ---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
 ---> Using cache
 ---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Using cache
 ---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......

参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

runoob@runoob:~$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
runoob/centos       6.7                 860c279d2fec        About a minute ago   190.6 MB
runoob/ubuntu       v2                  70bf1840fd7c        17 hours ago         158.5 MB
ubuntu              14.04               90d5884b1ee0        6 days ago           188 MB
php                 5.6                 f40e9e0f10c8        10 days ago          444.8 MB
nginx               latest              6f8d099c3adc        12 days ago          182.7 MB
mysql               5.6                 f2e8d6c772c0        3 weeks ago          324.6 MB
httpd               latest              02ef73cf1bc0        3 weeks ago          194.4 MB
ubuntu              15.10               4e3b13c8a266        5 weeks ago          136.3 MB
hello-world         latest              690ed74de00f        6 months ago         960 B
centos              6.7                 d95b5ca17cc3        6 months ago         190.6 MB
training/webapp     latest              6fae60ef3446        12 months ago        348.8 MB

我们可以使用新的镜像来创建容器

创建容器 docker run

  • 基本命令
~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world

以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果

  • 交互式启动容器
~$ docker run -it ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

此时我们已进入一个 ubuntu15.10 系统的容器.

各个参数解析:

-t: 在新容器内指定一个伪终端或终端。

-i: 允许你对容器内的标准输入 (STDIN) 进行交互。

运行 exit 命令或者使用 CTRL+D 来退出容器。

root@0123ce188bd8:/#  exit
exit
root@runoob:~# 
  • 后台运行容器
~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

-d参数用于以后台进程方式启动容器,返回容器 ID

  • web端口映射
$ docker run -d -p 5000:5000 training/webapp python app.py
33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0
# 指定容器绑定的网络地址,比如绑定 127.0.0.1。通过访问 127.0.0.1:5001 来访问容器的 5000 端口
$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
$ docker ps
CONTAINER ID        IMAGE               COMMAND           ...           PORTS                     NAMES
33e4523d30aa        training/webapp     "python app.py"   ...   0.0.0.0:5000->5000/tcp    berserk_bartik
  • 容器命名

使用--name参数

$  docker run -d -P --name runoob training/webapp python app.py
43780a6eabaaf14e590b6e849235c75f3012995403f97749775e38436db9a441

删除容器 docker rm

$ docker rm -f 1e560fca3906
# 清理掉所有处于终止状态的容器
$ docker container prune

停止容器 docker stop

# 使用容器ID停止容器
~$ docker stop 5917eac21c36
# 使用容器别名停止容器
~$ docker stop my_docker

启动容器 docker start

# 使用容器ID停止容器
~$ docker start 5917eac21c36
# 使用容器别名停止容器
~$ docker start my_docker

重启容器 docker restart

$ docker restart <容器 ID>

进入容器 docker exec

$ docker exec -it 243c32535da7 /bin/bash

查看容器运行情况 docker ps

~$ docker ps
CONTAINER ID        IMAGE                  COMMAND              ...  
5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

  • 使用 -a参数可以显示非运行状态下的容器
~$ docker ps -a

查看容器标准输出 docker logs

~$ docker logs 5917eac21c36

5917eac21c36是容器ID

查看容器端口映射 docker port

$ docker port 容器ID 5000
127.0.0.1:5001

文章作者: 小小千千
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小小千千 !
评论
  目录