0


docker yum安装

docker简介:

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

什么是沙箱机制:

Sandbox(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。

docker的组成部分:

DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器

Docker 架构:

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

docker run 参数

常用参数说明:

[root@localhost ~]# docker run --help

Usage:  docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Create and run a new container from an image
Aliases:
  docker container run, docker run

# OPTIONS 说明
    -d, --detach=false, 指定容器运行于前台还是后台,默认为false
    -i, --interactive=false, 打开STDIN,用于控制台交互
    -t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
    -u, --user="", 指定容器的用户
    -a, --attach=[], 登录容器(必须是以docker run -d启动的容器)
    -w, --workdir="", 指定容器的工作目录
    -c, --cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
    -e, --env=[], 指定环境变量,容器中可以使用该环境变量
    -m, --memory="", 指定容器的内存上限
    -P, --publish-all=false, 指定容器暴露的端口
    -p, --publish=[], 指定容器暴露的端口
        有四种模式
        ip:hostPort:containerPort
        ip::containerPort
        hostPort:containerPort
        containerPort
    -h, --hostname="", 指定容器的主机名
    -v, --volume=[], 给容器挂载存储卷,挂载到容器的某个目录

# IMAGE 说明
要运行镜像的REPOSITORY:TAG或IMAGE ID

# COMMAND说明
需要在容器内执行的命令
      
# ARG 说明
指的是一些其他参数

docker部署

环境准备

卸载旧版本

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

安装依赖

yum install -y yum-utils \ device-mapper-persistent-data \ lvm2

下载阿里云仓库

wget http://mirrors.aliyun.com/repo/Centos-7.repo

wget  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y epel-release

mv *.repo /etc/yum.repo.d/

安装docker

yum install -y docker-ce

开启docker

systemctl start docker.service 
systemctl enable docker.service 
systemctl status  docker.service 
docker version

安装docker-compose

github

的地址下载太慢了,国内可以使用http://get.daocloud.io/#install-compose网站上面的地址。

首先下载

docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#授权
chmod +x /usr/local/bin/docker-compose

#最后查看版本
docker-compose -v

基本操作

下载服务的镜像

#docker下载Apache镜像
docker pull httpd

#docker下载Tomcat镜像
docker pull tomcat

导出镜像

#docker的镜像下载好后可以导出到本地,方便以后使用
#格式:docker save -o 导出后的名称 要导出的镜像
docker save -o centos_httpd httpd:latest 
docker save -o centos_tomcat tomcat:latest 

删除镜像

#删除镜像
#格式docker rmi 镜像ID/镜像REPOSITORY:TAG

docker rmi httpd:latest 
docker rmi tomcat:latest 

导入镜像

#把刚刚导出的镜像重新导入
格式:docker load < 名称

docker load < centos_httpd 
docker load < centos_tomcat 

启动服务并将端口映射到本机端口

docker run -itd -p 主机端口:docker端口 --name=名称 --privileged(超级特权) 镜像
 
例如
docker run -itd -p 80:80 --name=web01 --privileged httpd:latest

查看容器IP和路由

docker inspect --format='{{.NetworkSettings.IPAddress}}' ps中的ID号/name
 
or

iptables -t nat -L -n --line-numbers

docker cp

#从本地复制到docker容器内
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
docker cp [选项] 本地路径 容器ID:文件路径 

例如:
docker cp /root/anaconda-ks.cfg db765f5a5883:/opt/anaconda-ks.cfg

[root@localhost ~]# docker cp /root/anaconda-ks.cfg db765f5a5883:/opt
Preparing to copy...
Copying to container - 3.072kB
Successfully copied 3.072kB to db765f5a5883:/opt

#从docker容器内复制到本地
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [选项] 容器ID:文件路径 本地路径

例如
docker cp db765f5a5883:/opt/anaconda-ks.cfg /root/anaconda-ks1.cfg

[root@localhost ~]# docker cp db765f5a5883:/opt/anaconda-ks.cfg /root/anaconda-ks1.cfg
Preparing to copy...
Copying from container - 512B
Copying from container - 1.861kB
Copying from container - 2.048kB
Copying from container - 2.56kB
Successfully copied 3.072kB to /root/anaconda-ks1.cfg

docker创建mysql容器

#首先下载mysql镜像
docker pull mysql

#创建容器并开启
docker run -itd -p 3306:3306 --name=mysql --privileged -e MYSQL_ROOT_PASSWORD=123456  mysql:latest

#效果,执行完的数字每个人都不一样
[root@localhost ~]# docker run -itd -p 3306:3306 --name=mysql --privileged -e MYSQL_ROOT_PASSWORD=123456  mysql:latest
97d97364eb9b2fe980034271c48c52dff3cecd0d38bd515b5c1340d6fc9df830

#docker ps -a查看
docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
97d97364eb9b   mysql:latest   "docker-entrypoint.s…"   4 seconds ago       Up 3 seconds       0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

#本地查看,有3306端口即可
[root@localhost ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:81              0.0.0.0:*               LISTEN      2014/docker-proxy   
tcp        0      0 0.0.0.0:82              0.0.0.0:*               LISTEN      2524/docker-proxy   
tcp        0      0 0.0.0.0:83              0.0.0.0:*               LISTEN      3350/docker-proxy   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1021/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1301/master         
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      4943/docker-proxy   
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      708/rpcbind         
tcp        0      0 192.168.100.10:22       192.168.100.254:52178   ESTABLISHED 1846/sshd: root@pts 
tcp        0      0 192.168.100.10:22       192.168.100.254:57579   ESTABLISHED 1691/sshd: root@pts 
tcp6       0      0 :::81                   :::*                    LISTEN      2018/docker-proxy   
tcp6       0      0 :::82                   :::*                    LISTEN      2528/docker-proxy   
tcp6       0      0 :::83                   :::*                    LISTEN      3354/docker-proxy   
tcp6       0      0 :::22                   :::*                    LISTEN      1021/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1301/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      4947/docker-proxy   
tcp6       0      0 :::111                  :::*                    LISTEN      708/rpcbind   

#进入mysql容器查看版本
docker exec -it 97d9 mysql -uroot -p123456

select version();

docker创建redis容器

#首先下载redis镜像
docker pull redis

#将其他redis服务器的配置文件scp到docker服务器上
#修改配置文件相应内容

#创建redis容器
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /root/redis.conf:/etc/redis/redis.conf  -d redis:latest redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass 000415

[root@localhost ~]# docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf  -d redis:latest redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass 000415
d66321472bdaf87a13f985cd271bf181ec4dc6eb8e2bf6f20c3b817584d29c53

#查看
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
d66321472bda   redis:latest   "docker-entrypoint.s…"   8 seconds ago       Up 8 seconds       0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis

#查看版本
docker exec -it  redis  redis-server -v

[root@localhost ~]# docker exec -it  redis  redis-server -v
Redis server v=7.0.10 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=abb4a9fa55bb4507

docker创建tomcat容器

#下载tomcat镜像
docker pull tomcat

#启动
[root@localhost ~]# docker run -itd -p 8080:8080 --name=tomcat --privileged tomcat:latest 
f1a5ba6ce1c25a559edcdbef73db80ed63e9cc4b806a8a417eee15a647bf023c

[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE           COMMAND                   CREATED          STATUS          PORTS                                                  NAMES
f1a5ba6ce1c2   tomcat:latest   "catalina.sh run"         17 seconds ago   Up 16 seconds   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              tomcat

#进入tomcat
docker exec -it f1a5ba6ce1c2 /bin/bash

[root@localhost ~]# docker exec -it f1a5ba6ce1c2 /bin/bash
root@f1a5ba6ce1c2:/usr/local/tomcat# 

#将webapps.dist/中内容复制到webapps,如果不复制的话,访问时会报错
root@f1a5ba6ce1c2:/usr/local/tomcat# ls
bin           conf             lib      logs            NOTICE     RELEASE-NOTES  temp     webapps.dist
BUILDING.txt  CONTRIBUTING.md  LICENSE  native-jni-lib  README.md  RUNNING.txt    webapps  work
root@f1a5ba6ce1c2:/usr/local/tomcat# ls webapps
root@f1a5ba6ce1c2:/usr/local/tomcat# ls webapps.dist/
docs  examples  host-manager  manager  ROOT
root@f1a5ba6ce1c2:/usr/local/tomcat# cp -r webapps.dist/* webapps/

docker迁移与备份

docker commit

#编写一个index.html文件
my name is zmy !!!

#将他复制到nginx容器
docker cp index.html 2c6e485a671c:/usr/share/nginx/html/index.html

#根据nginx容器创建一个新的镜像
docker commit 2c6e485a671c my_nginx

#启动这个新的容器,将端口映射到81号端口
docker run -itd -p 81:80 my_nginx:latest 

#访问对比
[root@localhost ~]# curl 192.168.100.10
my name is lzz !!!
[root@localhost ~]# curl 192.168.100.10:81
my name is lzz !!!

结论
直接将一个运行的容器,直接打包成一个镜像,这个镜像里包含那个容器的所有配置

docker save和docker export的区别

1.docker save保存的是镜像,docker export保存的是容器

2.docker save会保留镜像所有的历史记录,docker export不会,即没有commit历史

3.docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;

4.docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

docker export/import

#语法
docker export [OPTIONS] CONTAINER

Options:
  -o, --output string   Write to a file, instead of STDOUT    #将输入内容写到文件。

例如:
#将redis打包
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE           COMMAND                   CREATED             STATUS             PORTS                                       NAMES
db765f5a5883   ubuntu:22.10    "/bin/bash"               15 minutes ago      Up 15 minutes                                                  myubuntu
a250e3354a34   redis:7.0.10    "docker-entrypoint.s…"   26 minutes ago      Up 26 minutes      0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   myredis
b0815fd9ba92   python:3.11.3   "python3"                 About an hour ago   Up About an hour                                               mypython
[root@localhost ~]# docker export -o redis-`date +%Y%m%d`.tar a250e3354a34
[root@localhost ~]# ls
anaconda-ks.cfg  redis-20230411.tar
#语法
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
docker import [选项] 文件名 要起的镜像名:标签

Options:
  -c, --change list       Apply Dockerfile instruction to the created image    #应用docker 指令创建镜像;
  -m, --message string    Set commit message for imported image                #提交时的说明文字;
      --platform string   Set platform if server is multi-platform capable

例如:
#将刚刚保存的redis 导入docker
[root@localhost ~]# docker import redis-20230411.tar redis:import
sha256:e7a57daf9a697080d3abe725b0367ddbd566d6d7a72d2d42d16f461f87b777ec
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
redis        import    e7a57daf9a69   17 seconds ago   113MB
python       3.11.3    148bdd2c547f   5 days ago       921MB
redis        7.0.10    31f08b90668e   2 weeks ago      117MB
ubuntu       22.10     558d44db75c8   4 weeks ago      70.3MB
标签: docker 运维 容器

本文转载自: https://blog.csdn.net/faoids/article/details/130025342
版权归原作者 郝1. 所有, 如有侵权,请联系我们删除。

“docker yum安装”的评论:

还没有评论