赞
踩
目录
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Sandbox(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。
DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。
- [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 说明
- 指的是一些其他参数
-

- 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/
yum install -y docker-ce
- systemctl start docker.service
- systemctl enable docker.service
- systemctl status docker.service
- docker version
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
- docker inspect --format='{{.NetworkSettings.IPAddress}}' ps中的ID号/name
-
- or
-
- iptables -t nat -L -n --line-numbers
- #从本地复制到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

- #首先下载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();

- #首先下载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

- #下载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/
-
-

- #编写一个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 !!!
-
- 结论
- 直接将一个运行的容器,直接打包成一个镜像,这个镜像里包含那个容器的所有配置

1.docker save保存的是镜像,docker export保存的是容器
2.docker save会保留镜像所有的历史记录,docker export不会,即没有commit历史
3.docker load用来载入镜像包,docker import用来载入容器包,但两者都会恢复为镜像;
4.docker load不能对载入的镜像重命名,而docker 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

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。