部署Docker

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS Agent(兼容OpenClaw),2核4GB
简介:

一、简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。


Docker的理念:一个容器只运行一个服务

Docker官网口号包含了Build,Shipand Run Any App,Anywhere,即任何应用,都可以构建、发布、运行于任何环境,将环境的影响因素降至最低,统一地掌控整个应用的生命周期。


Docker的官方文档:http://docs.docker.com/


二、安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 、安装epel源
注释:默认CentOS6.x提供的yum源里没有docker的安装包,在这里我们借助EPEL源。
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# sed -i 's@^#@@' /etc/yum.repos.d/epel.repo
# sed -i 's@mirrorlist@#mirrorlist@' /etc/yum.repos.d/epel.repo
 
2 、安装docker
# yum -y remove docker
# yum install docker-io 
 
3 、启动docker守护进程
# service docker start
# chkconfig docker on
 
4 、检查docker是否已经正确安装并运行
# docker info
 
5 、查看docker的版本
# docker -v


三、命令参数

1、docker命令帮助参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@localhost ~] # docker
Usage: docker [OPTIONS] COMMAND [arg...]
 
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  from  a container's filesystem to the host path
     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    Stream the contents of a container as a tar archive
     history   Show the history of an image
     images     List  images
     import     Create a new filesystem image  from  the contents of a tarball
     info      Display system - wide information
     inspect   Return low - level information on a container
     kill      Kill a running container
     load      Load an image  from  a tar archive
     login     Register  or  log  in  to a Docker registry server
     logout    Log out  from  a Docker registry server
     logs      Fetch the logs of a container
     port      Lookup the public - facing port that  is  NAT - ed to PRIVATE_PORT
     pause     Pause  all  processes within a container
     ps         List  containers
     pull      Pull an image  or  a repository  from  a Docker registry server
     push      Push an image  or  a repository to a Docker registry server
     restart   Restart a running container
     rm        Remove one  or  more containers
     rmi       Remove one  or  more images
     run       Run a command  in  a new container
     save      Save an image to a tar archive
     search    Search  for  an image on the Docker Hub
     start     Start a stopped container
     stop      Stop a running container
     tag       Tag an image into a repository
     top       Lookup the running processes of a container
     unpause   Unpause a paused container
     version   Show the Docker version information
     wait      Block until a container stops, then  print  its exit code

2、比较常用命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
查看Docker的版本信息
# docker version
 
在Docker Hub上搜索一个指定镜像
# docker search
 
在Docker Hub上搜索一个指定镜像并至少有10颗星
# docker search -s 10 ubuntu
 
从一个Docker的注册服务器上拉取一个镜像或一个私有仓库
# docker pull ubuntu
 
查看镜像列表
# docker images
 
在一个新的容器中运行一个命令
# docker run
 
移除一个或多个镜像
# docker rmi
 
移除一个或多个容器
# docker rm
 
附着一个运行的容器
# docker attach
 
运行一个命令在一个运行的容器中
# docker exec
 
从一个Dockerfile文件中构建一个镜像
# docker build
 
查看镜像构建历史
# docker history
 
查看容器更为详细的配置信息
# docker inspect
 
保存一个镜像对归档 tar
# docker save
 
从一个归档 tar 中加载一个镜像
# docker load
 
启动、停止、重启一个运行的容器
# docker start| stop| restart
 
杀掉一个正在运行的容器
# docker kill
 
额外补充
进入容器命令:
docker attach:登陆到运行的容器中
docker  exec :在宿主机上运行命令到容器内部,类似在打开一个容器的终端
docker nsenter:连接到容器,需要容器PID


四、创建ssh镜像和镜像打包

1、从Docker Hub上下载ubuntu镜像

1
2
3
4
[root@localhost ~] # docker pull ubuntu:14.04
[root@localhost ~] # docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.04               b7cf8f0d9e82        3 days ago          188.3 MB

2、基于镜像创建一个容器

1
2
3
4
[root@localhost ~] # docker run -it ubuntu:14.04 /bin/bash
[root@localhost ~] # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
88b6a8dfae4e        ubuntu:14.04         "/bin/bash"          3 minutes ago       Up 3 minutes                            modest_yalow

3、进入容器安装ssh服务

1
2
3
4
5
6
7
8
9
root@88b6a8dfae4e:/ # apt-get update && apt-get install -y openssh-server
root@0af7ccfd906e:/ # echo 'root:redhat' | chpasswd
root@10dbbd22172d:/ # mkdir /var/run/sshd
root@10dbbd22172d:/ # sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
root@10dbbd22172d:/ # sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
root@10dbbd22172d:/ # exit
[root@localhost ~] # docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
88b6a8dfae4e        ubuntu:14.04         "/bin/bash"          10 minutes ago      Exited (130) 18 seconds ago                       modest_yalow

4、构建一个ssh的镜像

1
2
3
4
5
6
[root@localhost ~] # docker commit 88b6a8dfae4e zhengyas/ubuntu:sshd
3f2225df36ff67cbda098318e83128f3965758eba3e4609a094c172b0c3b03c4
[root@localhost ~] # docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
zhengyas /ubuntu       sshd                3f2225df36ff        21 seconds ago      251.1 MB
ubuntu               14.04               b7cf8f0d9e82        3 days ago          188.3 MB

5、基于新镜像运行一个ssh容器

1
2
3
4
5
[root@localhost ~] # docker run -d -p 2222:22 zhengyas/ubuntu:sshd /usr/sbin/sshd -D
7ef47903cdb77ad9d98fd0dd3b102473d10ad3abea5311c030177db9ea9984c1
[root@localhost ~] # docker ps -l
CONTAINER ID        IMAGE                  COMMAND               CREATED             STATUS              PORTS                  NAMES
7ef47903cdb7        zhengyas /ubuntu :sshd    "/usr/sbin/sshd -D"    4 seconds ago       Up 4 seconds        0.0.0.0:2222->22 /tcp    hungry_ritchie

6、测试ssh容器是否能够正常连接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@localhost ~] # ssh root192.168.0.104 -p 2222
ssh : Could not resolve  hostname  root192.168.0.104: Name or service not known
[root@localhost ~] # ssh root@192.168.0.104 -p 2222
The authenticity of host  '[192.168.0.104]:2222 ([192.168.0.104]:2222)'  can't be established.
RSA key fingerprint is 0e:1e:4e:67:f3:4b:5a:c4:c2:f5:7b:e7:f0:2e:14:72.
Are you sure you want to  continue  connecting ( yes /no )?  yes
Warning: Permanently added  '[192.168.0.104]:2222'  (RSA) to the list of known hosts.
root@192.168.0.104's password: 
Welcome to Ubuntu 14.04 LTS (GNU /Linux  3.2.0-61-generic x86_64)
 
  * Documentation:  https: //help .ubuntu.com/
 
The programs included with the Ubuntu system are  free  software;
the exact distribution terms  for  each program are described  in  the
individual files  in  /usr/share/doc/ * /copyright .
 
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
 
root@7ef47903cdb7:~ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:03  
           inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
           inet6 addr: fe80::42:acff:fe11:3 /64  Scope:Link
           UP BROADCAST RUNNING  MTU:1500  Metric:1
           RX packets:47 errors:0 dropped:0 overruns:0 frame:0
           TX packets:40 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:5638 (5.6 KB)  TX bytes:6521 (6.5 KB)
 
lo        Link encap:Local Loopback  
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1 /128  Scope:Host
           UP LOOPBACK RUNNING  MTU:65536  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0 
           RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

7、镜像持久化,俗称镜像打包

镜像打包(Save)

1
[root@localhost ~] # docker save zhengyas/ubuntu > /root/sshd.tar

镜像导入(Load)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
实验模拟
1、删除此sshd容器
[root@localhost ~] # docker ps -a
CONTAINER ID        IMAGE                  COMMAND               CREATED             STATUS              PORTS                  NAMES
7ef47903cdb7        zhengyas /ubuntu :sshd    "/usr/sbin/sshd -D"    14 minutes ago      Up 14 minutes       0.0.0.0:2222->22 /tcp    hungry_ritchie      
[root@localhost ~] # docker stop 7ef47903cdb7
7ef47903cdb7
[root@localhost ~] # docker rm 7ef47903cdb7
7ef47903cdb7
 
2、删除sshd镜像
[root@localhost ~] # docker rmi zhengyas/ubuntu:sshd
Untagged: zhengyas /ubuntu :sshd
Deleted: 3f2225df36ff67cbda098318e83128f3965758eba3e4609a094c172b0c3b03c4
[root@localhost ~] # docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu               14.04               b7cf8f0d9e82        3 days ago          188.3 MB
 
3、导入打包的镜像
[root@localhost ~] # docker load < /root/sshd.tar 
[root@localhost ~] # docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
zhengyas /ubuntu       sshd                3f2225df36ff        18 minutes ago      251.1 MB
ubuntu               14.04               b7cf8f0d9e82        3 days ago          188.3 MB


五、基于Dockerfile来创建mysql镜像

1、创建Dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@localhost ~] # mkdir mysql_ubuntu
[root@localhost ~] # cd mysql_ubuntu/
[root@localhost mysql_ubuntu] # cat Dockerfile 
FROM ubuntu:14.04
 
RUN apt-get update
 
RUN apt-get -y  install  mysql-client mysql-server
RUN  sed  -i -e "s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/"  /etc/mysql/my .cnf
 
ADD . /startup .sh  /opt/startup .sh
 
EXPOSE 3306
 
CMD [ "/bin/bash" "/opt/startup.sh" ]

2、创建mysql服务启动脚本文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@localhost mysql_ubuntu] # cat startup.sh 
#!/bin/bash
 
if  [ ! -f  /var/lib/mysql/ibdata1  ];  then
 
     mysql_install_db
 
     /usr/bin/mysqld_safe  &
     sleep  10s
 
     echo  "GRANT ALL ON *.* TO admin@'%' IDENTIFIED BY 'changeme' WITH GRANT OPTION; FLUSH PRIVILEGES"  | mysql
 
     killall mysqld
     sleep  10s
fi
 
/usr/bin/mysqld_safe

3、构建mysql镜像

1
# docker build -t zhengys/mysql .

4、查看镜像

1
2
3
[root@localhost ~] # docker images
REPOSITORY           TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
zhengys /mysql         latest              f58add96ecb7        About a minute ago   338.9 MB

6、基于新镜像创建mysql容器

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@localhost ~] # mkdir /data/mysql -p
[root@localhost ~] # docker run -d -p 3306:3306 -v /data/mysql:/var/lib/mysql zhengys/mysql
0112ba90e4a30a13e4f3af26f4a5bcd73e91ae3afa881a36fadd34cd953d0ada
[root@localhost ~] # docker ps -l
CONTAINER ID        IMAGE                  COMMAND                CREATED             STATUS              PORTS                    NAMES
0112ba90e4a3        zhengys /mysql :latest   " /bin/bash  /opt/star    4 seconds ago       Up 3 seconds        0.0.0.0:3306->3306 /tcp    reverent_hawking    
[root@localhost ~] # ll /data/mysql/
total 28680
-rw-rw----. 1 103  106 18874368 Apr 25 17:46 ibdata1
-rw-rw----. 1 103  106  5242880 Apr 25 19:09 ib_logfile0
-rw-rw----. 1 103  106  5242880 Apr 25 17:45 ib_logfile1
drwx------. 2 103 root     4096 Apr 25 17:45 mysql
drwx------. 2 103  106     4096 Apr 25 17:45 performance_schema

7、测试mysql容器

1
2
3
4
5
6
7
8
[root@localhost ~] # mysql -uadmin -p123456 -h192.168.0.104 -P 3306 -e 'show databases'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

或者提供一个登陆mysql客户端脚本

run-client.sh

1
2
3
4
5
6
7
8
9
#!/bin/sh
 
TAG= "mysql"
 
CONTAINER_ID=$(docker  ps  grep  $TAG |  awk  '{print $1}' )
 
IP=$(docker inspect $CONTAINER_ID | python -c  'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]' )
 
mysql -u admin -p -h $IP

六、简化Docker和lxc

1、Lxc和Docker结构图


wKioL1U9BUajTl37AAE26DMffs4988.jpg

wKioL1U9BpSBgkkKAAGUiL-TQ78751.jpg


Linux = linux内核 + 用户空间(Lxc)

Lxc(Linux Container):linux容器 = Cgroup + Namespaces

Docker集装箱 = Lxc + images


lxc功能包括资源管理和隔离机制。

资源管理:通过cgroup限制cpu和内存的使用

隔离机制:用户空间namespace都是独立的


LXC包集成了这些linux内核机制提供了一个用户空间容器对象,即是针对某一应用提供资源隔离和控制轻量级虚拟系统。


Docker对container的使用基本是建立在lxc基础之上的,然而lxc存在的问题是难以移动-难以通过标准化模板制作、重建、复制和移动container。


LXC依赖namespace来实现隔离性的。

让每个容器都有自已的命名空间,确保不同容器之间不会相互影响,让每个容器成为拥有自已进程和网络空间的虚拟环境,都成为一个独立运行的单位。

此外,lxc由内核cgroup来对各个容器(进程)使用的系统资源做严格的限制。


  • 算算时间,学习Docker也有半个月时间了,到现在为止给我的第一感觉仍然是不习惯,或许是用传统虚拟化用习惯了,或许是自已对Docker研究过于肤浅,或许自已根本没有入门等等一些原因,在没有接触到Docker之前自已玩过lxc,使用起来特别顺手,网上都说Docker自动化了lxc的管理过程,能够自动在线下载相应的发行版本rootfs

  • Docker的火热程度,使我们做IT的不得不去深入研究、学习


好吧!今天就先到这里,后续会继续更大家聊聊Docker技术.







     本文转自zys467754239 51CTO博客,原文链接:http://blog.51cto.com/467754239/1638301,如需转载请自行联系原作者







相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
人工智能 Linux API
【最新】OpenClaw保姆级图文教程:阿里云/本地部署步骤+百炼API配置+常见问题解答
作为小微企业主,日常经营中总会被客户档案整理、销售数据统计、库存提醒等重复性工作占据大量时间,忙碌之余还容易因琐事遗漏影响业务推进。而OpenClaw这款AI自动化助手,能将各类机械性的工作流程实现自动化处理,从文件整理、数据统计到定时提醒、消息发送,仅需简单的自然语言指令,就能让AI完成相应操作,大幅释放人工精力。本文将结合实际使用场景,详细讲解OpenClaw的功能应用,同时带来2026年新手零基础下,阿里云、MacOS、Linux、Windows11多平台的本地部署步骤,以及阿里云百炼API的配置方法和部署使用中的常见问题解答,让零基础用户也能轻松上手这款AI自动化工具。
2759 4
|
API 开发工具 数据安全/隐私保护
使用阿里云的短信服务发送短信
使用阿里云的短信服务发送短信
1681 0
使用阿里云的短信服务发送短信
|
16天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23521 12
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
4天前
|
Shell API 开发工具
Claude Code 快速上手指南(新手友好版)
AI编程工具卷疯啦!Claude Code凭借任务驱动+终端原生的特性,成了开发者的效率搭子。本文从安装、登录、切换国产模型到常用命令,手把手带新手快速上手,全程避坑,30分钟独立用起来。
1251 7
|
5天前
|
人工智能 BI 持续交付
Claude Code 深度适配 DeepSeek V4-Pro 实测:全场景通关与真实体验报告
在 AI 编程工具日趋主流的今天,Claude Code 凭借强大的任务执行、工具调用与工程化能力,成为开发者与自动化运维的核心效率工具。但随着原生模型账号稳定性问题频发,寻找一套兼容、稳定、能力在线的替代方案变得尤为重要。DeepSeek V4-Pro 作为新一代高性能大模型,提供了完整兼容 Claude 协议的 API 接口,只需简单配置即可无缝驱动 Claude Code,且在任务执行、工具调用、复杂流程处理上表现极为稳定。
1382 3
|
10天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
2538 4