github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/docs/installation/mac.md (about) 1 <!--[metadata]> 2 +++ 3 title = "Installation on Mac OS X" 4 description = "Instructions for installing Docker on OS X using boot2docker." 5 keywords = ["Docker, Docker documentation, requirements, boot2docker, VirtualBox, SSH, Linux, OSX, OS X, Mac"] 6 [menu.main] 7 parent = "engine_install" 8 weight="-90" 9 +++ 10 <![end-metadata]--> 11 12 # Mac OS X 13 14 You install Docker using Docker Toolbox. Docker Toolbox includes the following Docker tools: 15 16 * Docker Machine for running the `docker-machine` binary 17 * Docker Engine for running the `docker` binary 18 * Docker Compose for running the `docker-compose` binary 19 * Kitematic, the Docker GUI 20 * a shell preconfigured for a Docker command-line environment 21 * Oracle VM VirtualBox 22 23 Because the Docker daemon uses Linux-specific kernel features, you can't run 24 Docker natively in OS X. Instead, you must use `docker-machine` to create and 25 attach to a virtual machine (VM). This machine is a Linux VM that hosts Docker 26 for you on your Mac. 27 28 **Requirements** 29 30 Your Mac must be running OS X 10.8 "Mountain Lion" or newer to install the 31 Docker Toolbox. 32 33 ### Learn the key concepts before installing 34 35 In a Docker installation on Linux, your physical machine is both the localhost 36 and the Docker host. In networking, localhost means your computer. The Docker 37 host is the computer on which the containers run. 38 39 On a typical Linux installation, the Docker client, the Docker daemon, and any 40 containers run directly on your localhost. This means you can address ports on a 41 Docker container using standard localhost addressing such as `localhost:8000` or 42 `0.0.0.0:8376`. 43 44 ![Linux Architecture Diagram](images/linux_docker_host.svg) 45 46 In an OS X installation, the `docker` daemon is running inside a Linux VM called 47 `default`. The `default` is a lightweight Linux VM made specifically to run 48 the Docker daemon on Mac OS X. The VM runs completely from RAM, is a small ~24MB 49 download, and boots in approximately 5s. 50 51 ![OSX Architecture Diagram](images/mac_docker_host.svg) 52 53 In OS X, the Docker host address is the address of the Linux VM. When you start 54 the VM with `docker-machine` it is assigned an IP address. When you start a 55 container, the ports on a container map to ports on the VM. To see this in 56 practice, work through the exercises on this page. 57 58 59 ### Installation 60 61 If you have VirtualBox running, you must shut it down before running the 62 installer. 63 64 1. Go to the [Docker Toolbox](https://www.docker.com/toolbox) page. 65 66 2. Click the Download link. 67 68 3. Install Docker Toolbox by double-clicking the package or by right-clicking 69 and choosing "Open" from the pop-up menu. 70 71 The installer launches the "Install Docker Toolbox" dialog. 72 73 ![Install Docker Toolbox](images/mac-welcome-page.png) 74 75 4. Press "Continue" to install the toolbox. 76 77 The installer presents you with options to customize the standard 78 installation. 79 80 ![Standard install](images/mac-page-two.png) 81 82 By default, the standard Docker Toolbox installation: 83 84 * installs binaries for the Docker tools in `/usr/local/bin` 85 * makes these binaries available to all users 86 * installs VirtualBox; or updates any existing installation 87 88 To change these defaults, press "Customize" or "Change 89 Install Location." 90 91 5. Press "Install" to perform the standard installation. 92 93 The system prompts you for your password. 94 95 ![Password prompt](images/mac-password-prompt.png) 96 97 6. Provide your password to continue with the installation. 98 99 When it completes, the installer provides you with some information you can 100 use to complete some common tasks. 101 102 ![All finished](images/mac-page-finished.png) 103 104 7. Press "Close" to exit. 105 106 ## Running a Docker Container 107 108 To run a Docker container, you: 109 110 * Create a new (or start an existing) virtual machine 111 * Switch your environment to your new VM 112 * Use the `docker` client to create, load, and manage containers 113 114 You can reuse this virtual machine as often as you like. Like any 115 VirtualBox VM, it maintains its configuration between uses. 116 117 There are two ways to use the installed tools, from the Docker Quickstart Terminal or 118 [from your shell](#from-your-shell). 119 120 ### From the Docker Quickstart Terminal 121 122 1. Open the "Applications" folder or the "Launchpad". 123 124 2. Find the Docker Quickstart Terminal and double-click to launch it. 125 126 The application: 127 128 * Opens a terminal window 129 * Creates a `default` VM if it doesn't exists, and starts the VM after 130 * Points the terminal environment to this VM 131 132 Once the launch completes, the Docker Quickstart Terminal reports: 133 134 ![All finished](images/mac-success.png) 135 136 Now, you can run `docker` commands. 137 138 3. Verify your setup succeeded by running the `hello-world` container. 139 140 $ docker run hello-world 141 Unable to find image 'hello-world:latest' locally 142 511136ea3c5a: Pull complete 143 31cbccb51277: Pull complete 144 e45a5af57b00: Pull complete 145 hello-world:latest: The image you are pulling has been verified. 146 Important: image verification is a tech preview feature and should not be 147 relied on to provide security. 148 Status: Downloaded newer image for hello-world:latest 149 Hello from Docker. 150 This message shows that your installation appears to be working correctly. 151 152 To generate this message, Docker took the following steps: 153 1. The Docker client contacted the Docker daemon. 154 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 155 (Assuming it was not already locally available.) 156 3. The Docker daemon created a new container from that image which runs the 157 executable that produces the output you are currently reading. 158 4. The Docker daemon streamed that output to the Docker client, which sent it 159 to your terminal. 160 161 To try something more ambitious, you can run an Ubuntu container with: 162 $ docker run -it ubuntu bash 163 164 For more examples and ideas, visit: 165 http://docs.docker.com/userguide/ 166 167 168 A more typical way to interact with the Docker tools is from your regular shell command line. 169 170 ### From your shell 171 172 This section assumes you are running a Bash shell. You may be running a 173 different shell such as C Shell but the commands are the same. 174 175 1. Create a new Docker VM. 176 177 $ docker-machine create --driver virtualbox default 178 Creating VirtualBox VM... 179 Creating SSH key... 180 Starting VirtualBox VM... 181 Starting VM... 182 To see how to connect Docker to this machine, run: docker-machine env default 183 184 This creates a new `default` VM in VirtualBox. 185 186 The command also creates a machine configuration in the 187 `~/.docker/machine/machines/default` directory. You only need to run the 188 `create` command once. Then, you can use `docker-machine` to start, stop, 189 query, and otherwise manage the VM from the command line. 190 191 2. List your available machines. 192 193 $ docker-machine ls 194 NAME ACTIVE DRIVER STATE URL SWARM 195 default * virtualbox Running tcp://192.168.99.101:2376 196 197 If you have previously installed the deprecated Boot2Docker application or 198 run the Docker Quickstart Terminal, you may have a `dev` VM as well. When you 199 created `default` VM, the `docker-machine` command provided instructions 200 for learning how to connect the VM. 201 202 3. Get the environment commands for your new VM. 203 204 $ docker-machine env default 205 export DOCKER_TLS_VERIFY="1" 206 export DOCKER_HOST="tcp://192.168.99.101:2376" 207 export DOCKER_CERT_PATH="/Users/mary/.docker/machine/machines/default" 208 export DOCKER_MACHINE_NAME="default" 209 # Run this command to configure your shell: 210 # eval "$(docker-machine env default)" 211 212 4. Connect your shell to the `default` machine. 213 214 $ eval "$(docker-machine env default)" 215 216 5. Run the `hello-world` container to verify your setup. 217 218 $ docker run hello-world 219 220 ## Learn about your Toolbox installation 221 222 Toolbox installs the Docker Engine binary, the Docker binary on your system. When you 223 use the Docker Quickstart Terminal or create a `default` VM manually, Docker 224 Machine updates the `~/.docker/machine/machines/default` folder to your 225 system. This folder contains the configuration for the VM. 226 227 You can create multiple VMs on your system with Docker Machine. Therefore, you 228 may end up with multiple VM folders if you have more than one VM. To remove a 229 VM, use the `docker-machine rm <machine-name>` command. 230 231 ## Migrate from Boot2Docker 232 233 If you were using Boot2Docker previously, you have a pre-existing Docker 234 `boot2docker-vm` VM on your local system. To allow Docker Machine to manage 235 this older VM, you can migrate it. 236 237 1. Open a terminal or the Docker CLI on your system. 238 239 2. Type the following command. 240 241 $ docker-machine create -d virtualbox --virtualbox-import-boot2docker-vm boot2docker-vm docker-vm 242 243 3. Use the `docker-machine` command to interact with the migrated VM. 244 245 The `docker-machine` subcommands are slightly different than the `boot2docker` 246 subcommands. The table below lists the equivalent `docker-machine` subcommand 247 and what it does: 248 249 | `boot2docker` | `docker-machine` | `docker-machine` description | 250 |----------------|------------------|----------------------------------------------------------| 251 | init | create | Creates a new docker host. | 252 | up | start | Starts a stopped machine. | 253 | ssh | ssh | Runs a command or interactive ssh session on the machine.| 254 | save | - | Not applicable. | 255 | down | stop | Stops a running machine. | 256 | poweroff | stop | Stops a running machine. | 257 | reset | restart | Restarts a running machine. | 258 | config | inspect | Prints machine configuration details. | 259 | status | ls | Lists all machines and their status. | 260 | info | inspect | Displays a machine's details. | 261 | ip | ip | Displays the machine's ip address. | 262 | shellinit | env | Displays shell commands needed to configure your shell to interact with a machine | 263 | delete | rm | Removes a machine. | 264 | download | - | Not applicable. | 265 | upgrade | upgrade | Upgrades a machine's Docker client to the latest stable release. | 266 267 268 ## Examples on Mac OS X 269 270 Work through this section to try some practical container tasks on a VM. At this 271 point, you should have a VM running and be connected to it through your shell. 272 To verify this, run the following commands: 273 274 $ docker-machine ls 275 NAME ACTIVE DRIVER STATE URL SWARM 276 default * virtualbox Running tcp://192.168.99.100:2376 277 278 The `ACTIVE` machine, in this case `default`, is the one your environment is pointing to. 279 280 ### Access container ports 281 282 1. Start an NGINX container on the DOCKER_HOST. 283 284 $ docker run -d -P --name web nginx 285 286 Normally, the `docker run` commands starts a container, runs it, and then 287 exits. The `-d` flag keeps the container running in the background 288 after the `docker run` command completes. The `-P` flag publishes exposed ports from the 289 container to your local host; this lets you access them from your Mac. 290 291 2. Display your running container with `docker ps` command 292 293 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 294 5fb65ff765e9 nginx:latest "nginx -g 'daemon of 3 minutes ago Up 3 minutes 0.0.0.0:49156->443/tcp, 0.0.0.0:49157->80/tcp web 295 296 At this point, you can see `nginx` is running as a daemon. 297 298 3. View just the container's ports. 299 300 $ docker port web 301 443/tcp -> 0.0.0.0:49156 302 80/tcp -> 0.0.0.0:49157 303 304 This tells you that the `web` container's port `80` is mapped to port 305 `49157` on your Docker host. 306 307 4. Enter the `http://localhost:49157` address (`localhost` is `0.0.0.0`) in your browser: 308 309 ![Bad Address](images/bad_host.png) 310 311 This didn't work. The reason it doesn't work is your `DOCKER_HOST` address is 312 not the localhost address (0.0.0.0) but is instead the address of your Docker VM. 313 314 5. Get the address of the `default` VM. 315 316 $ docker-machine ip default 317 192.168.59.103 318 319 6. Enter the `http://192.168.59.103:49157` address in your browser: 320 321 ![Correct Addressing](images/good_host.png) 322 323 Success! 324 325 7. To stop and then remove your running `nginx` container, do the following: 326 327 $ docker stop web 328 $ docker rm web 329 330 ### Mount a volume on the container 331 332 When you start a container it automatically shares your `/Users/username` directory 333 with the VM. You can use this share point to mount directories onto your container. 334 The next exercise demonstrates how to do this. 335 336 1. Change to your user `$HOME` directory. 337 338 $ cd $HOME 339 340 2. Make a new `site` directory. 341 342 $ mkdir site 343 344 3. Change into the `site` directory. 345 346 $ cd site 347 348 4. Create a new `index.html` file. 349 350 $ echo "my new site" > index.html 351 352 5. Start a new `nginx` container and replace the `html` folder with your `site` directory. 353 354 $ docker run -d -P -v $HOME/site:/usr/share/nginx/html \ 355 --name mysite nginx 356 357 6. View the `mysite` container's port. 358 359 $ docker port mysite 360 80/tcp -> 0.0.0.0:49166 361 443/tcp -> 0.0.0.0:49165 362 363 7. Open the site in a browser: 364 365 ![My site page](images/newsite_view.png) 366 367 8. Add a page to your `$HOME/site` in real time. 368 369 $ echo "This is cool" > cool.html 370 371 9. Open the new page in the browser. 372 373 ![Cool page](images/cool_view.png) 374 375 10. Stop and then remove your running `mysite` container. 376 377 $ docker stop mysite 378 $ docker rm mysite 379 380 > **Note**: There is a [known 381 > issue](https://docs.docker.com/machine/drivers/virtualbox/#known-issues) that 382 > may cause files shared with your nginx container to not update correctly as you 383 > modify them on your host. 384 385 ## Upgrade Docker Toolbox 386 387 To upgrade Docker Toolbox, download and re-run the [Docker Toolbox 388 installer](https://docker.com/toolbox/). 389 390 391 ## Uninstall Docker Toolbox 392 393 To uninstall, do the following: 394 395 1. List your machines. 396 397 $ docker-machine ls 398 NAME ACTIVE DRIVER STATE URL SWARM 399 dev * virtualbox Running tcp://192.168.99.100:2376 400 my-docker-machine virtualbox Stopped 401 default virtualbox Stopped 402 403 2. Remove each machine. 404 405 $ docker-machine rm dev 406 Successfully removed dev 407 408 Removing a machine deletes its VM from VirtualBox and from the 409 `~/.docker/machine/machines` directory. 410 411 3. Remove the Docker Quickstart Terminal and Kitematic from your "Applications" folder. 412 413 4. Remove the `docker`, `docker-compose`, and `docker-machine` commands from the `/usr/local/bin` folder. 414 415 $ rm /usr/local/bin/docker 416 417 5. Delete the `~/.docker` folder from your system. 418 419 420 ## Learning more 421 422 Use `docker-machine help` to list the full command line reference for Docker Machine. For more 423 information about using SSH or SCP to access a VM, see the [Docker Machine 424 documentation](https://docs.docker.com/machine/). 425 426 You can continue with the [Docker Engine User Guide](../userguide/index.md). If you are 427 interested in using the Kitematic GUI, see the [Kitematic user 428 guide](https://docs.docker.com/kitematic/userguide/).